JavaScript stopImmediatePropagation在事件处理程序中不起作用
我想使用stopImmediatePropagation来防止同一元素上的第二个(mousedown)hadler开火,但它不起作用。代码示例:JavaScript stopImmediatePropagation在事件处理程序中不起作用,javascript,event-handling,Javascript,Event Handling,我想使用stopImmediatePropagation来防止同一元素上的第二个(mousedown)hadler开火,但它不起作用。代码示例: $(函数(){ var showEventsMessage=函数(选项){ 选项=$。扩展({ eventType:'单击', 事件目标:这,, 后缀:“” },选项); var message=options.eventType+':'+ (options.eventTarget.nodeName | |“未知”)+ 选项。后缀; $('#Mess
$(函数(){
var showEventsMessage=函数(选项){
选项=$。扩展({
eventType:'单击',
事件目标:这,,
后缀:“
”
},选项);
var message=options.eventType+':'+
(options.eventTarget.nodeName | |“未知”)+
选项。后缀;
$('#Messages')。追加(message);
}
$('.clickable')。单击(函数(){
showEventsMessage.呼叫(此{
eventType:event.type
});
}).dblclick(函数(){
showEventsMessage.呼叫(此{
eventType:event.type
});
}).mousedown(函数(){
showEventsMessage.呼叫(此{
eventType:event.type
});
事件。stopImmediatePropagation();
event.preventDefault();
}).mousedown(函数(){
showEventsMessage.呼叫(此{
eventType:event.type,
后缀:'#2
'
});
});
})
点击这里。。。
或此处
不同之处在于参数是一个jQuery事件对象,如果没有参数,它将使用原始的JS事件对象。获得jQuery版本是因为使用jQuery初始化事件处理程序
您试图调用的函数“stopImmediatePropagation”是一个jQuery函数,并且没有在原始JS事件中定义,这就是它无法工作的原因。注意,您在这两种情况下都添加了jQuery事件处理程序 在第一种情况下,您试图通过对全局(本机JS)事件调用
stopImmediatePropagation
来停止执行jQuery处理程序。因此,它不起作用
当您从参数中提取
事件
时,您正在调用jQuery.event
上的stopImmediatePropagation
。因此,它成功地停止了jQuery处理程序的执行。实际上stopImmediatePropagation
是一种jQuery方法。
通过在mousedown
event callback中传递event
,它将传递jquery引用和stopImmediatePropagation
,然后与它一起调用并工作,但当您不传递event
参数时,它将指向默认的javascript事件对象,该对象没有stopImmediatePropagation
的引用。因此,它在那里不起作用请参阅:。您使用的浏览器是什么?Chrome、Opera、Edge和IE都在执行事件侦听器时定义window.event。很抱歉,这只是@Joost_96 answer的一种改写。既然他是第一个贴出来的,他就应该得到足够多的赞誉@TarunLalwani。当我打开这个问题时,没有答案,所以我发布了这个答案。有时候,你应该确保在发布答案之前刷新页面。这有助于避免这种情况。下次会小心的。^这不是真的!