Rai*_*den 5 javascript jquery eventtrigger
我已经为这个问题制作了这个测试代码:http://jsfiddle.net/5phqm/1/
据我了解,如果jQuery triggerHandler()阻止默认的浏览器行为,那么本机JavaScript事件将不会被触发和处理(addEventListener()在我的代码中也是如此),但是通过标签属性添加的内联事件onclick=""无论如何都会被触发!为什么会这样?我是否误解了浏览器中触发的事件?
可以确认内联处理程序已运行,因为它是显式编码的:
handle = ontype && cur[ ontype ];
if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
event.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)
ontype这种情况下在哪里"onclick"。所以它是获取onclick元素的属性然后执行它。这段代码总是被调用,无论.trigger/如何.triggerHandler。
然而,本机操作(如 )仅在块elem.click()内执行:if
if ( !onlyHandlers && !event.isDefaultPrevented() ) {
// ...
elem[ type ]();
Run Code Online (Sandbox Code Playgroud)
其中onlyHandlers是truefortriggerHandle和falsefor .trigger,因此triggerHandler不执行eg elem.click()(而.trigger执行)。因此,本机操作被阻止。
因此内联处理程序和本机操作是不同的东西,也是分开处理的。仅阻止本机操作.triggerHandler。