我很难理解如何使用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(){...})
但没有成功。
答案 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。您需要使用解决方法。
答案 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方法捕获该事件。