jQuery的 - 我可以触发它自己的处理程序中的事件?(jQuery - Can I trigge

2019-10-19 06:36发布

所以,我基本都有。点击事件,但这e.preventDefault()。 然而,一旦代码执行完毕后,我想它解除绑定后,重新执行该事件。

所有这一切的背景下,我想设置出站链接事件与谷歌分析(analytics.js)的跟踪。

<a href="http://www.example.com/" id="link1"><img /></a>    
<script>        
    $("#link1").click(function(e) {
        e.preventDefault();

        ga('send', 'event', 
            'category', 
            'action', 
            'label', 
            { 
                'hitCallback': function() {                                         
                    $(this).unbind(e).trigger("click");
                } 
            }
        );
    });
</script>

这种设置是必要的,否则页面终止事件可以被发送之前。 另外,我想作的片断尽可能的独立,因为该脚本将被复制粘贴到了很多地方。

我希望有类似e.sleepDefault(); 和e.wakeDefault();

Answer 1:

尝试这个:

 $("#link1").click(function(e) {
    e.preventDefault();
    var url = $(this).prop('href');
    ga('send', 'event', 
        'category', 
        'action', 
        'label', 
        { 
            'hitCallback': function() {                                         
                window.location = url;
            } 
        }
    );
 });


Answer 2:

好吧,大量的研究后,我意识到,我的问题是明确的事实,jQuery将不会允许你跟踪链接,而无需实际物理点击它们,因此你真的不能再骂人调用点击,并希望它下面的链接。 当你这样做,它作为一个“模拟”点击,所以它不会实际上遵循的HREF,但将执行一切你在处理程序有。

该解决方案是使用JavaScript的本地点击(),它并不关心,并会按照链接。

因此,这是看起来像我的代码:

<a href="http://www.example.com/" id="link1"></a>    
<script>        
    $("#link1").click(function(e) {
        var obj = $(this);
        e.preventDefault();

        ga('send', 'event', 
            'category', 
            'action', 
            'label', 
            { 
                'hitCallback': function() {                                         
                    obj.off(e);
                    obj[0].click();
                } 
            }
        );
    });
</script>

因此,这里的故障:

  1. ()启用的处理程序上的preventDefault物理点击执行。
  2. 它发出事件给谷歌。
  3. 谷歌回应,并执行回调函数。
  4. 单击处理程序将被禁用,以恢复默认行为。
  5. 点击再次模拟执行默认处理程序。

关键是[0]的jQuery对象转换为htmlDomObject它允许您使用,而不是jQuery的点击()的,就像我说的,不遵循链接本地JavaScript点击()。



文章来源: jQuery - Can I trigger an event within it's own handler?