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中的某些元素 。 您将需要使用解决方法。
这是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方法捕获该事件。