我在同一元素上有两个点击事件。其中一个是委托事件,另一个不是。
$( 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”。有什么想法吗?
答案 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
之前首先被触发。