如何触发href元素的点击事件

Posted

技术标签:

【中文标题】如何触发href元素的点击事件【英文标题】:How to trigger click event on href element 【发布时间】:2011-12-21 10:30:18 【问题描述】:

我正在尝试使用 jQuery 触发超链接上的点击事件,如下所示。超链接没有任何 id 但它有 css 类:

$(document).ready(function ()   
  $('.cssbuttongo').trigger('click'); 
); 

上面的功能不起作用。这是超链接:

<a href="hyperlinkurl" class="cssbuttongo">hyperlink anchor</a>

【问题讨论】:

由于一个类可以应用于 DOM 中的多个元素,因此触发点击它们似乎不是一个好主意。 NomikOS 你说得很对,但我检查了是否有其他元素使用这个 css 类:) ***.com/questions/7999806/… 【参考方案1】:

通过 javascript 触发点击不会打开超链接。这是浏览器内置的安全措施。

不过,请参阅 this question 了解一些解决方法。

【讨论】:

我不这么认为.. 因为:我发现它是这样工作的 .. 关注jsfiddle here @CodyDmd 仍然是用户触发的点击事件。与 OP 的原始问题不同。 @CodyDmd 看来[0] 在你的小提琴中很重要 这究竟能防止哪些漏洞? 好吧,我不明白你的意思,Blazemonger,因为在 Firefox、Chrome 和 IE11 中都没有针对下载或 SEO 点击欺诈的保护。也就是说,你的答案are false的第一句和第二句都一样。【参考方案2】:

我没有事实证据来证明这一点,但我已经遇到了这个问题。似乎在 &lt;a&gt; 标签上触发 click() 事件的行为似乎与您对输入按钮的预期不同。

我采用的解决方法是在窗口上设置 location.href 属性,这会导致浏览器像这样加载请求资源:

$(document).ready(function()

      var href = $('.cssbuttongo').attr('href');
      window.location.href = href; //causes the browser to refresh and load the requested url
   );
);

编辑:

我会做一个 js fiddle,但问题的性质与 jsfiddle 如何使用 iframe 来呈现代码相混合,这让我无法做到。

【讨论】:

这是正确答案。谢谢 :) 我还注意到点击 href 不起作用。 @MonsterMMorpg 请记住,这不会导致浏览器认为这是直接的用户操作。所以明智地使用 =D 不应该是var href = $('.cssbuttongo').attr('href'); 这忽略了链接也有onclick事件的可能性。只需执行$('.cssbuttongo')[0].click() 即可正确模拟整个点击。 实际上它只适用于完整的href。由于我无法将代码放在这里,请阅读我对这篇文章的回答。【参考方案3】:

原生 DOM 方法做对了:

$('.cssbuttongo')[0].click();
                  ^
              Important!

无论 href 是 URL、片段(例如 #blah)还是 javascript:,这都有效。

请注意,这调用了 DOM click 方法而不是 jQuery 的 click 方法(它非常不完整,完全忽略了 href)。

【讨论】:

@Timwi,我的意思是说第一个 $('.cssbuttongo').click(); // ignores href! 不能保证工作。后一个将始终有效,因为使用 index [0] 将使 jQuery 对象成为常规 JS 对象,这与浏览器使用的完全相同。 @刘伟 太棒了!非常直接和说明性的答案。 这应该是选择的答案。完美运行! @AdilMalik 它之所以有效,是因为 jquery 不是唯一具有 click() 方法的东西。这段代码调用了非 jquery 的 click() 方法,它是原生 DOM 的东西。 @Timwi 我在这里提供 jsfiddle:jsfiddle.net/NabiKAZ/3gv90od5【参考方案4】:

只是想让你们知道,接受的答案并不总是有效。

这是一个失败的例子。

如果&lt;href='/list'&gt;

href = $('css_selector').attr('href')
"/list"
href = document.querySelector('css_selector').href
"http://localhost/list"

或者你可以将你从 jQuery 得到的 href 附加到这个

href = document.URL +$('css_selector').attr('href');

或者jQuery方式

href = $('css_selector').prop('href')

最后调用它来改变浏览器当前页面的url

window.location.href = href

或使用window.open(url)弹出它

Here 是 JSFiddle 中的一个示例。

【讨论】:

所以你是说如果你把它改成$('css_selector')[0].click()这行不通?它适用于this JsFiddle... 为了记录,投反对票的不是我;我认为这里可能有一些东西,我还不确定。 @romkyns,当然,在使用 [0] 从 jQuery 元素中提取后它会起作用(它变成纯 JS),我的意思是说 $('.cssbuttongo').click(); 不起作用,因为它只会给出无论 href 的值是什么,而不是浏览器使用的 URL。对于误导性的 cmets,我们深表歉意。 @LinDong:如果您知道 [0].click() 有效,为什么您的回答没有提及? location.href 接受相对路径,因此使用 /list 将自动添加当前域。所以它确实有效。【参考方案5】:

除了romkyns的great answer..这里还有一些相关的文档/例子。


DOM 元素have a native .click() method.

htmlElement.click() 方法模拟鼠标点击元素。

当使用 click 时,它还会触发元素的 click 事件,该事件将冒泡到文档树(或事件链)更高的元素并触发它们的 click 事件。 但是,冒泡点击事件不会导致&lt;a&gt; 元素启动导航,就像收到真正的鼠标点击一样。 (mdn reference)

相关W3 documentation。


几个例子..

您可以从 jQuery 对象访问特定的 DOM 元素:(example)

  $('a')[0].click();

您可以使用 .get() 方法从 jQuery 对象中检索 DOM 元素:(example)

  $('a').get(0).click();

正如预期的那样,您可以选择 DOM 元素并调用 .click() 方法。 (example)

  document.querySelector('a').click();

值得指出的是,触发原生.click() 事件不需要 jQuery。

【讨论】:

【参考方案6】:

我遇到了如何单击按钮而不是链接的类似问题。它在方法 .trigger('click') 或 [0].click() 中没有成功,我不知道为什么。最后,以下内容对我有用:

$('#elementid').mousedown();

【讨论】:

以上是关于如何触发href元素的点击事件的主要内容,如果未能解决你的问题,请参考以下文章

Sencha:如何在 li 元素上触发点击事件

java中如何获取网页中鼠标点击过的事件

如何触发从 iframe 到其父元素的点击事件?

Chrome 开发者工具:如何知道点击元素时触发的事件?

如何阻止子元素触发父元素的事件

vue 的点击事件怎么获取当前点击的元素