jQuery.trigger('click')不起作用

lic*_*ode 139 html javascript jquery triggers eventtrigger

似乎我无法正确理解jQuery触发器('click')功能.

有人可以告诉我为什么这个简单的代码不起作用以及如何解决?

HTML:

<a id="bar" href="http://stackoverflow.com" target="_blank">Don't click me!</a>
<span id="foo">Click me!</span>
Run Code Online (Sandbox Code Playgroud)

jQuery的:

jQuery('#foo').on('click', function(){
    jQuery('#bar').trigger('click');
});
Run Code Online (Sandbox Code Playgroud)

演示:FIDDLE

我想要的是能够点击#foo(运行良好)并模拟#bar上的点击(完全忽略,没有任何错误消息).也试过jQuery(document).ready(function(){...})但没有成功.

Ale*_*x W 263

您需要使用jQuery('#bar')[0].click(); 鼠标单击实际DOM元素(而不是jQuery对象),而不是使用.trigger()jQuery方法.

注意:DOM Level 2 .click()不适用于Safari中的某些元素.您需要使用变通方法.

http://api.jquery.com/click/

  • 你节省了我的一天$('#asd')[0] .click(); (16认同)

小智 37

你只需要在这样做之前放一个小的超时事件.click() :

setTimeout(function(){ $('#btn').click()}, 100);
Run Code Online (Sandbox Code Playgroud)

  • 这也解决了我的问题,谢谢。其他解决方案均无法可靠工作。我的代码显示了一个模式,然后模拟了选项卡上的单击。为什么需要延迟?为了安全起见,我不得不使用 500 毫秒。 (2认同)

Fil*_*rny 33

这是JQuery的行为.我不确定为什么它以这种方式工作,它只触发链接上的onClick功能.

尝试:

jQuery(document).ready(function() {
    jQuery('#foo').on('click', function() {
        jQuery('#bar')[0].click();
    });
});
Run Code Online (Sandbox Code Playgroud)


Rez*_*mun 19

看我的演示:http://jsfiddle.net/8AVau/1/

jQuery(document).ready(function(){
    jQuery('#foo').on('click', function(){
         jQuery('#bar').simulateClick('click');
    });
});

jQuery.fn.simulateClick = function() {
    return this.each(function() {
        if('createEvent' in document) {
            var doc = this.ownerDocument,
                evt = doc.createEvent('MouseEvents');
            evt.initMouseEvent('click', true, true, doc.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
            this.dispatchEvent(evt);
        } else {
            this.click(); // IE Boss!
        }
    });
}
Run Code Online (Sandbox Code Playgroud)


Alb*_*alà 14

可能有用:

调用触发器的代码应该调用事件之后进行.

例如,我有一些代码,我希望在#expense_tickets值更改时执行,并且当页面重新加载时

$(function() { 

  $("#expense_tickets").change(function() {
    // code that I want to be executed when #expense_tickets value is changed, and also, when page is reload
  });

  // now we trigger the change event
  $("#expense_tickets").trigger("change");

})
Run Code Online (Sandbox Code Playgroud)

  • 啊,这也是我的问题!对于为什么`trigger()`无法正常工作感到困惑.结果我把触发器代码设置为ABOVE它正在调用的函数 - 所以钩子实际上并不到位.卫生署! (4认同)

Ale*_*ara 5

jQuery .trigger('click');只会导致一个事件在此事件上触发,它也不会触发默认的浏览器操作。

您可以使用以下JavaScript模拟相同的功能:

jQuery('#foo').on('click', function(){
    var bar = jQuery('#bar');
    var href = bar.attr('href');
    if(bar.attr("target") === "_blank")
    {
        window.open(href);
    }else{
        window.location = href;
    }
});
Run Code Online (Sandbox Code Playgroud)