Jquery dispatchEvent包装方法 [英] Jquery dispatchEvent wrapper method

查看:115
本文介绍了Jquery dispatchEvent包装方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆