我已经为一个问题做了此测试代码: http://jsfiddle.net/5phqm/1/

据我了解,如果JQuery的 triggerHandler() 防止默认浏览器行为,然后不会触发和处理本机JavaScript事件(这是正确的 addEventListener() 在我的代码中),但是内联事件,通过TAG的属性添加 onclick="" 无论如何将被触发!为什么会发生?我是否误解了有关浏览器中触发事件的事情?

有帮助吗?

解决方案

可以确定的是,在线处理程序正在运行,因为它是 明确编码:

handle = ontype && cur[ ontype ];
if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
    event.preventDefault();
}

在哪里 ontype 在这种情况下 "onclick". 。所以它正在获取 onclick 元素的属性,然后执行。无论如何,这条代码总是被调用 .trigger/.triggerHandler.

但是,本地行动像 elem.click(), ,仅执行 内部 if 堵塞:

if ( !onlyHandlers && !event.isDefaultPrevented() ) {
    // ...
    elem[ type ]();

在哪里 onlyHandlerstrue 为了 triggerHandlefalse 为了 .trigger, ,因此 triggerHandler 不执行EG elem.click() (然而 .trigger 做)。因此,防止本地行动。

因此,内联操作人员和本地动作是单独的事物,也可以单独处理。仅阻止本地行动 .triggerHandler.

其他提示

我认为(但这是一个猜测,我简要介绍了jQuery源代码,这可能是完全错误的),jQuery通过调用类似的内容来检索jquery.trigger.vent中附加到元素的事件

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top