如何获得JQuery.trigger('click');启动鼠标单击

时间:2014-01-05 01:21:59

标签: javascript jquery html triggers eventtrigger

我很难理解如何使用JQuery模拟鼠标点击。有人可以告诉我我做错了什么。

HTML:

<a id="bar" href="http://stackoverflow.com" target="_blank">Don't click me!</a>
<span id="foo">Click me!</span>

jQuery的:

jQuery('#foo').on('click', function(){
    jQuery('#bar').trigger('click');
});

演示:FIDDLE

当我点击按钮#foo时,我想模拟#bar上的点击,但是当我尝试这个时,没有任何反应。我也试过jQuery(document).ready(function(){...})但没有成功。

11 个答案:

答案 0 :(得分:248)

您需要使用jQuery('#bar')[0].click(); to simulate a mouse click on the actual DOM element(而不是jQuery对象),而不是使用.trigger() jQuery方法。

注意:DOM级别2 .click()不适用于some elements in Safari。您需要使用解决方法。

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

答案 1 :(得分:32)

在执行.click()之前,您只需要输入一个小超时事件 像这样:

setTimeout(function(){ $('#btn').click()}, 100);

答案 2 :(得分:31)

这是JQuery的行为。我不确定它为什么会这样工作,它只会触发链接上的onClick函数。

尝试:

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

答案 3 :(得分:18)

请参阅我的演示: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!
        }
    });
}

答案 4 :(得分:14)

可能有用:

在调用事件之后,调用Trigger的代码应该

例如,我有一些代码要在#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");

})

答案 5 :(得分:4)

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;
    }
});

答案 6 :(得分:2)

尝试这对我有用:

$('#bar').mousedown();

答案 7 :(得分:0)

我已经尝试了前两个答案,但在我删除&#34; display:none&#34;之前,它并没有为我工作。从我的文件输入元素。 然后我又回到了.trigger()它也在safari for windows中工作。

所以结论,不要使用display:none;要隐藏文件输入,您可以使用不透明度:0代替。

答案 8 :(得分:0)

从技术上讲,这不是对此的回答,而是充分利用已接受的答案(https://stackoverflow.com/a/20928975/82028)为jQuery ACF字段上的标签创建next和prev按钮:

$('.next').click(function () {
    $('#primary li.active').next().find('.acf-tab-button')[0].click();
});

$('.prev').click(function () {
    $('#primary li.active').prev().find('.acf-tab-button')[0].click();
});

答案 9 :(得分:0)

只需使用此:

$(function() {
 $('#watchButton').trigger('click');
});

答案 10 :(得分:-3)

您无法使用javascript模拟点击事件。 jQuery .trigger()函数仅触发元素上名为“click”的事件,您可以使用.on() jQuery方法捕获该事件。