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