同一元素上的多个事件,停止立即传播

时间:2015-03-20 11:56:04

标签: javascript jquery

我在同一元素上有两个点击事件。其中一个是委托事件,另一个不是。

$( document ).on( 'click.bar', 'p', function( e ) {

    console.log( 'click.bar', e );

    e.stopImmediatePropagation();

});

$( 'p' ).on( 'click.foo', function( e ) {

    console.log( 'click.foo' );

});

我想在执行“click.bar”时在特定情况下禁用“click.foo”。问题是,在调用“click.bar”之前总是调用“click.foo”。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您处理来自$(document)的两个事件,event.stopImediatePropagation工作正常。

您必须先在脚本中注册第一个事件(带有event.stopImediatePropagation的事件),因此在点击document时会先调用它。

$( document ).on( 'click.bar', 'p', function( e ) {

    console.log( 'click.bar', e );

    e.stopImmediatePropagation();

});

$( document ).on( 'click.foo', 'p', function( e ) {

    console.log( 'click.foo' );

});

其他方式它不起作用,因为jQuery使事件起泡(从内到外),因此p中注册的事件在到达document之前首先被触发。