Search code examples
jqueryevent-propagation

stopPropagation() "Prevents the event from bubbling up the DOM tree" : what does it means?


I don't really understand what e.stopPropagation() do.

If I have a link using return false to the handler I should get what I want (prevent the default link behaviour, so it doesnt "call" the next href location) :

<a id="myLink" href="http://www.google.com">Go to google</a>​

$('#myLink').click(function (e) {
    alert("No, you don't go to Google");
    return false;
});​

Adding e.stopPropagation() what can I get? Can you give to me a solid example showing to me what e.stopPropagation() can do?


Solution

  • Easy, stopPropagation stops any events bubbling up to its container, its container's container etc etc.

    Here's a live example: http://jsfiddle.net/5B7sw/

    HTML:

    <div id="container">
        <button id="propagate">Propagate</button>
        <button id="nopropagate">Do not Propagate</button>
    </div>
    

    and js:

    $('#container').click(function(){
       console.log('container click') ;
    });
    
    
    $('#propagate').click(function(){
       console.log('propagateclick');
    });
    
    
    $('#nopropagate').click(function(e){
       console.log('nopropagateclick');
        e.stopPropagation();
    });
    

    Clicking the button title "propagate" (default behaviour) will write "propagate click" and "containerclick" to the console. Clicking the button which includes a call to e.stopPropagation() will not print the "container click" message as propagation up to the container has been halted.