8
What a Javascript Bubble Event means?
I couldn’t understand the meaning and use of the Bubbles events. Following the W3schools reference: https://www.w3schools.com/jsref/event_bubbles.asp
Could you please help with this reference?
8
What a Javascript Bubble Event means?
I couldn’t understand the meaning and use of the Bubbles events. Following the W3schools reference: https://www.w3schools.com/jsref/event_bubbles.asp
Could you please help with this reference?
7
It’s a very simple concept, sometimes the shape that is presented leaves a little confusing, but basically an event .bubbles returns a boolean value indicating if a given event is "bubbling". The term "bubbling" comes from the idea of a rising water bubble, i.e., the event is first captured in the innermost element and then propagated to external elements.
Below is an illustration from quirksmode - order of events
/ \
---------------| |-----------------
| elemento1 | | |
| -----------| |----------- |
| |elemento2 | | | |
| ------------------------- |
| Evento BUBBLING |
-----------------------------------
And an example that shows in practice the order of propagation:
var divs = document.getElementsByTagName('div');
function bubble() {
log('bubble: ' + this.firstChild.nodeValue.trim())
}
for (var i = 0; i < divs.length; i++) {
divs[i].addEventListener('click', bubble, false);
}
var $log = $('#log');
function log(msg) {
$log.append('<p>' + msg + '</p>');
}
div {
border: 1px solid red;
padding: 5px;
min-height: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>elemento 1
<div>elemento 2
<div>elemento 3
<div>elemento 4
<div>elemento 5</div>
</div>
</div>
</div>
</div>
<section id="log"></section>
+1, Liked the reference old school pro quirksmode
@bfavaretto "for all your browser quirks" hehe, nor did I know it was so old.
7
Summary: bubbles is a property of some events and indicates whether the event can be captured outside the element where it was created, or not.
Lengthy explanation:
For example when we click on a button, we can capture the event click. This is an event that has the property bubbles and with value true. This means that it can be captured or intercepted in any parent element of the same.
An example:
$('div').on('click', function(e) {
console.log('O evento passou por', this.id, e.bubbles);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="pai">
<div id="filho">
<div id="neto">
<button>Clica-me</button>
</div>
</div>
</div>
By clicking on the button we see that the event passes through the 3 elements. Now the same does not happen for example in the event focus.
Example:
$('div, input').on('focus', function(e) {
console.log('O evento passou por', this.id, e.bubbles);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="pai">
<div id="filho">
<div id="neto">
<input id="input" type="text" placeholder="clica aqui"></input>
</div>
</div>
</div>
That’s because the event focus has value false on the property bubbles.
To prevent such spread ("Bubbling") we can use the .stopPropagation(); that applied to the first example would be so:
$('div').on('click', function(e) {
console.log('O evento passou por', this.id);
// com esta condição, o evento não chega a "pai"
if (this.id == 'filho') e.stopPropagation();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="pai">
<div id="filho">
<div id="neto">
<button>Clica-me</button>
</div>
</div>
</div>
Browser other questions tagged javascript javascript-events
You are not signed in. Login or sign up in order to post.
I think that this other question/answer (https://answall.com/a/149663/129) already covers your question: You can take a look?
– Sergio