Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript stopImmediatePropagation在事件处理程序中不起作用_Javascript_Event Handling - Fatal编程技术网

JavaScript stopImmediatePropagation在事件处理程序中不起作用

JavaScript stopImmediatePropagation在事件处理程序中不起作用,javascript,event-handling,Javascript,Event Handling,我想使用stopImmediatePropagation来防止同一元素上的第二个(mousedown)hadler开火,但它不起作用。代码示例: $(函数(){ var showEventsMessage=函数(选项){ 选项=$。扩展({ eventType:'单击', 事件目标:这,, 后缀:“” },选项); var message=options.eventType+':'+ (options.eventTarget.nodeName | |“未知”)+ 选项。后缀; $('#Mess

我想使用stopImmediatePropagation来防止同一元素上的第二个(mousedown)hadler开火,但它不起作用。代码示例:

$(函数(){
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。当我打开这个问题时,没有答案,所以我发布了这个答案。有时候,你应该确保在发布答案之前刷新页面。这有助于避免这种情况。下次会小心的。^这不是真的!