单击与JQuery链接时出现意外结果

时间:2016-09-06 01:53:15

标签: javascript jquery html

我不知道这对我来说是否只是一个简单的疏忽,但我做错了什么?我想要regular.js的结果,但为什么这不适用于jquery?

html:
<a href="" class="foobar" id="foobar">click me</a>

regular.js:
document.getElementById('foobar').click();
// this results in the page continuously clicking and reloading the page


jquery.js:
$(document).ready(function() {
    setTimeout(function() {
        $("#foobar").trigger('click');
    },5);
});
// this waits for page to load before executing, but does nothing.

2 个答案:

答案 0 :(得分:0)

来自jQuery docs

  

触发器:执行附加到给定事件类型的匹配元素的所有处理程序和行为。

您应该将.trigger('click')替换为.click()

更新

阅读完评论后再搜索一下,我发现了以下内容:

问题

jQuery可以使用以下方法激活绑定的方法:

  • jQuery(.bind.on.click等)
  • 原生装订element.onclick = function() {}

但如果使用element.addEventListener()添加方法,jQuery的.click().trigger()将无声地失败。

解决方案

使用element.click()激活所有绑定方法。鼠标实际点击也是如此,但这很简单。

此外,MDN表示OP已指出以下内容:

  

click()方法不会导致元素启动导航,就像收到真正的鼠标点击一样。

我在Ubuntu 14上试过Chrome 52和Firefox 48,它似乎对我有用。不过,还不确定MDN所说的是错误的。

答案 1 :(得分:0)

不完全确定为什么你的工作不起作用 - jsfiddle

中的工作示例
$(document).ready(function() {

    $(document).on('click',"#foobar",function(){alert("hello world")})

    setTimeout(function() {
        $("#foobar").trigger('click');
    },5);
});