Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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 为什么使用jQuery';s triggerHandler()不';不能阻止内联事件?_Javascript_Jquery_Eventtrigger - Fatal编程技术网

Javascript 为什么使用jQuery';s triggerHandler()不';不能阻止内联事件?

Javascript 为什么使用jQuery';s triggerHandler()不';不能阻止内联事件?,javascript,jquery,eventtrigger,Javascript,Jquery,Eventtrigger,我为这个问题编写了以下测试代码: 据我所知,如果jQuery的triggerHandler()阻止默认的浏览器行为,那么本地JavaScript事件将不会被触发和处理(对于我的代码中的addEventListener()),但通过标记的属性onclick=“”添加的内联事件仍然会被触发!为什么会这样?我是否误解了浏览器中触发事件的某些内容?我认为jQuery通过调用 $(elem).data("events"); 然后决定是否开火/阻止他们。无法以这种方式收集内联事件,因此无法停止它们。

我为这个问题编写了以下测试代码:

据我所知,如果jQuery的
triggerHandler()
阻止默认的浏览器行为,那么本地JavaScript事件将不会被触发和处理(对于我的代码中的
addEventListener()
),但通过标记的属性
onclick=“”
添加的内联事件仍然会被触发!为什么会这样?我是否误解了浏览器中触发事件的某些内容?

我认为jQuery通过调用

   $(elem).data("events");

然后决定是否开火/阻止他们。无法以这种方式收集内联事件,因此无法停止它们。

可以确认内联处理程序正在运行,因为它是:

其中
ontype
在本例中是
“onclick”
。因此,它获取元素的
onclick
属性,然后执行它。无论
.trigger
/
.triggerHandler
如何,始终调用这段代码

但是,本机操作(如
elem.click()
)仅在以下情况下执行:

其中,
triggerHandle
onlyhandler
true
,而
triggerHandler
false
,因此
triggerHandler
不会执行,例如
elem.click()
(而
trigger
会执行)。因此,本机操作被阻止


因此,内联处理程序和本机操作是分开的,并且也是分开处理的。
.triggerHandler

只阻止本机操作,这是值得的,我一直认为这是遵循CSS规则的行为模式:内联代码覆盖
头中的代码,而头中的代码又覆盖了外部脚本中的代码。您可以简单地
removeAttr('onclick')
。这不是一个直接的答案,但在jQuery网站上,他们声明不会在内联事件处理程序的问题上花费精力:。我很想知道为什么你的代码会有这样的行为,但我不认为会有一个修复程序(以防你发现它是一个bug)。
handle = ontype && cur[ ontype ];
if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
    event.preventDefault();
}
if ( !onlyHandlers && !event.isDefaultPrevented() ) {
    // ...
    elem[ type ]();