Jquery dispatchEvent包装器方法

sim*_*ack 5 html javascript jquery events

在jquery中是否有一个包装器方法或一些用于dispatchEvent的库?我一直在stackoverflow上寻找这个,但我发现的最接近的方法是jquery的trigger(),它似乎只触发jquery事件监听器.当然我可以自己使用dispatchEvent,但我想使用jquery使我的代码更容易阅读.

我正在编写一个greasemonkey脚本,我想向一些匿名事件监听器发送一个事件.页面本身不是用jquery编写的.

这里有一个jsfiddle链接来解释我想要实现的目标: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);
    });
});
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

提前致谢.

use*_*245 10

实施triggerjQuery中(截至1.10.1)用于自定义事件不会触发本地事件,因此您将无法通过侦听它addEventListener或不同版本的jQuery同一页上加载.

这个错误及其所有用例都在这里有详细记录:http://bugs.jquery.com/ticket/11047

作为一种解决方案,您可以使用此插件检查浏览器是否支持触发自定义本机事件并在可用时使用它.

https://github.com/sandeep45/betterTrigger