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

IT技术 javascript jquery html triggers eventtrigger
2021-01-26 12:24:01

我很难理解如何使用 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');
});

演示:小提琴

当我点击按钮 #foo 我想模拟点击 #bar 但是当我尝试这样做时,什么也没有发生。我也尝试过,jQuery(document).ready(function(){...})但没有成功。

6个回答

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

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

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

使用它来单击 jQuery ACF 字段上的下一个选项卡: $('.next').click(function () { $('#primary li.active').next().find('.acf-tab-button ')[0].click(); });
2021-03-24 12:24:01
谢谢。它适用于桌面。但在移动设备(android chrome)上则不然。有什么建议?
2021-03-27 12:24:01
出于某种原因,这会破坏当前 URL 中的哈希值。
2021-04-08 12:24:01
如果 <a 标签上的一个 href 是“#”,那就行了。<a 通常重定向到不同的 URL。在单击处理程序返回之前,您必须使用 ev.preventDefault() 和 ev.stopPropagation() 停止它。或者,使用除 <a; 之外的其他标签 您可以将点击处理程序附加到任何可见的地方。
2021-04-11 12:24:01
这似乎不再起作用(在 Safari、Firefox 上测试)
2021-04-13 12:24:01

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

setTimeout(function(){ $('#btn').click()}, 100);
如果您尝试在页面加载时模拟点击,则效果很好。
2021-03-18 12:24:01
这也解决了我的问题,谢谢。其他解决方案都没有可靠地工作。我的代码显示了一个模式,然后模拟了一个选项卡上的点击。为什么需要延迟?为了安全起见,我不得不使用 500 毫秒。
2021-04-10 12:24:01

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

尝试:

jQuery(document).ready(function() {
    jQuery('#foo').on('click', function() {
        jQuery('#bar')[0].click();
    });
});
一点都不刺激。trigger()旨在执行点击事件JavaScript部分。这与创建一个function var() {}多次重用那个非常相似
2021-03-18 12:24:01

看我的演示: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!
        }
    });
}
我会把它包裹this.click();在一个else if(this.click)
2021-03-18 12:24:01
@clayRay - 是的,我同意你的看法。它是多年前制作的,牢记基于参数的动态。但后来我只是试图做出当前需求的解决方案。感谢您的观察。
2021-03-18 12:24:01
为什么要将字符串传递'click'simulateClick函数?它似乎没有被使用。
2021-04-13 12:24:01

可能有用:

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

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

})
啊,那也是我的问题!对为什么trigger()不起作用感到困惑结果我在它调用的函数上方设置了触发代码 - 所以钩子实际上没有到位。呸!
2021-03-17 12:24:01