Stopping propagation of mousedown/mouseup from a click handler

23,589

Yes. Since mouseclick and mousedown/mouseup are different events, you can't get at one from the other at all - you have to do it from within your own mousedown/mouseup handlers. What you can do is refactor that into a generic method to use in both places:

stopPropagation('#inner', 'mousedown');
stopPropagation('#inner', 'mouseup');

function stopPropagation(id, event) {
    $(id).on(event, function(e) {
        e.stopPropagation();
        return false;
    });
}
Share:
23,589
Josh Smith
Author by

Josh Smith

I consult for @letsfunnel and @coderly.

Updated on July 30, 2022

Comments

  • Josh Smith
    Josh Smith almost 2 years

    Here's a DEMO.

    I have two divs, an inner and an outer:

    <div id="outer">
        <div id="inner"></div>
    </div>
    

    With some CSS so you can see which is which:

    #outer {
        width: 250px;
        height: 250px;
        padding: 50px;
        background: yellow;
    }
    
    #inner {
        width: 250px;
        height: 250px;
        background: blue;
    }
    

    I try to stop propagation of mousedown and mouseup events from within a click handler like so:

    $('#inner').on('click', function(e) {
        e.stopPropagation();
        $(this).css({'background': 'green'});
        return false;
    });
    
    $('#outer').on('mousedown', function(e) {
        $(this).css({'background': 'green'});
    });
    
    $('#outer').on('mouseup', function(e) {
        $(this).css({'background': 'yellow'});
    });
    

    This doesn't seem possible. What does work is calling .stopPropagation from within other mousedown and mouseup calls, as shown here (another DEMO):

    $('#inner').on('mousedown', function(e) {
        e.stopPropagation();
        return false;
    });
    
    $('#inner').on('mouseup', function(e) {
        e.stopPropagation();
        return false;
    });
    

    I may have already answered my own question, but I'm not sure if my approach is the best or most reasonable. Is this the right way to stop an event bubbling up to a mousedown and mouseup?

  • Richard
    Richard over 9 years
    Watch out for spelling mistakes - propagation! Thanks for the help.
  • Jeff
    Jeff over 9 years
    @Richard Thanks - fixed!