javascript - Jquery dispatchEvent 包装器方法

标签 javascript jquery html events

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

我正在编写一个 greasemonkey 脚本,我想在其中向某个匿名事件监听器触发一个事件。页面本身不是用 jquery 编写的。

这里有一个 jsfiddle 链接来解释我想要完成的事情:https://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

此错误及其所有用例在此处有详细记录:http://bugs.jquery.com/ticket/11047

作为解决方案,您可以使用此 plugin ,它检查浏览器是否支持触发自定义 native 事件并在可用时使用它。

https://github.com/sandeep45/betterTrigger

关于javascript - Jquery dispatchEvent 包装器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18823872/

相关文章:

javascript - 我如何覆盖 Angular 对无效表单值的过滤,强制 Angular 将 $viewValue 保留为 $modelValue?

html - 在 html/css 中排列文本

javascript - JSNI Hello World 不工作

javascript - 如何转到 Angularjs 表达式中数组的下一项?

javascript - jQuery .get 不工作

jquery - 使用 jQuery getJSON 在 Reddit 上获取 url 的分数

jquery - 如何使用 jquery 选择 div,例如在 Photoshop 中? (选择区域)

javascript - 为 mask 图像分配更高的 z-index

javascript - 循环访问从 API 接收到的 json

javascript - AJAX PHP 邮件表单