Jquery dispatchEvent包装方法 [英] Jquery dispatchEvent wrapper method
问题描述
在jquery中是否有一个包装方法或某个用于dispatchEvent的库?我一直在寻找这个stackoverflow,但我发现最接近的方法是jquery的trigger(),它似乎只触发jquery事件监听器。我当然可以自己使用dispatchEvent,但是我想使用jquery来使我的代码更容易阅读。
Is there a wrapper method or some library for dispatchEvent in jquery? I've been looking for this on stackoverflow, but the closest method I've found is jquery's trigger(), which appears to only trigger jquery event listeners. Of course I could just use dispatchEvent myself, but I want to use jquery to make my code easier to read.
我正在写一个greasemonkey脚本,我想在向一些匿名事件侦听器发起一个事件。页面本身不是用jquery写的。
I'm writing a greasemonkey script, where I want to fire an event to some anonymous event listener. The page itself is not written in jquery.
这是一个jsfiddle链接,用于说明我要完成的内容: http://jsfiddle.net/Zx3CA/
Here's a jsfiddle link to explain what I'm trying to accomplish: http://jsfiddle.net/Zx3CA/
js:
function log(s){
document.getElementById('log').innerHTML+=s+'<br/>';
}
$(function(){
//code on the page, which shouldn't be changed
//start
document.getElementById('link').addEventListener('click',function(){
log('click detected');
},false);
//end
$('#triggerClickJQuery').on('click',function(){
$('#link').trigger('click');
});
$('#triggerClickJS').on('click',function(){
var event=document.createEvent('MouseEvents');
event.initMouseEvent('click',true,true,null,-1,-1,-1,-1,0,true,false,false,true,0,null);
$('#link').get(0).dispatchEvent(event);
});
});
html:
<body>
<a id="link" href="javascript:void(0);">Link</a><br/>
<a id="triggerClickJQuery" href="javascript:void(0);">Trigger Click JQuery</a><br/>
<a id="triggerClickJS" href="javascript:void(0);">Trigger Click JavaScript</a><br/>
<div id="log"></div>
</body>
提前感谢
推荐答案
对于自定义事件,在jQuery(最高1.10.1)中执行 trigger
不会触发本机事件因此,您将无法通过 addEventListener
或不同版本的 jQuery
加载在同一页面上进行收听。
The implementation of trigger
in jQuery (upto 1.10.1) for custom events doesn't fire a native event and therefore you wont be able to listen for it via addEventListener
or a different version of jQuery
loaded on the same page.
这个错误与所有的用例在这里有很好的记录: http ://bugs.jquery.com/ticket/11047
This bug with all of its use-cases is well documented here: http://bugs.jquery.com/ticket/11047
作为一个解决方案,您可以使用这个插件,它检查浏览器是否支持触发自定义本地事件,并在可用时使用它。
As a solution you can use this plugin, which checks if the browser supports firing custom native events and uses it when available.
https://github.com/sandeep45/betterTrigger
这篇关于Jquery dispatchEvent包装方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!