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

看来,我只是无法正确理解jQuery触发器('click')函数。

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

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(){...})但没有成功。

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

注意:DOM级别2 .click()不适用于Safari中的某些元素 。 您将需要使用解决方法。

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

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

尝试:

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

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

可能有用:

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

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

你只需要在执行.click()之前放一个小的超时事件就可以了:

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

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

您可以使用以下JavaScript来模拟相同的function:

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

试试这对我有用:

 $('#bar').mousedown(); 
 jQuery('#foo').on('click', function(){ window.open(jQuery('#bar').attr('href'), '_blank'); }); 

我已经尝试了前两个答案,直到我从我的文件input元素中删除“display:none”,它才起作用。 然后我又回到了.trigger(),它也在safari的窗口工作。

所以结论是, 不要使用display:none; 要隐藏文件input ,可以使用opacity:0。

从技术上讲,这不是一个答案,但很好的使用接受的答案( https://stackoverflow.com/a/20928975/82028 )为jQuery ACF字段上的选项卡创buildnext和prevbutton:

 $('.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(); }); 

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