当前位置:  开发笔记 > 编程语言 > 正文

如何模拟单击锚标记?

如何解决《如何模拟单击锚标记?》经验,为你挑选了4个好方法。

我想模拟点击一个锚标记,其中包含正确的目标处理等所有额外内容.

对于锚点的DOM对象似乎有一个"[click()] [3]"方法,但并非所有浏览器都支持它.Firefox抛出此错误:

错误:anchorObj.click不是函数

它在Opera 10和Konqueror上也很奇怪,当它在周围div的onclick处理程序中调用时会导致无限点击.我想只有IE8可以正常使用它.无论如何我不想要它,因为主流浏览器大多数都有问题.

我在Mozilla论坛中找到了Firefox的替代解决方案:

var evt = document.createEvent("MouseEvents"); 
evt.initMouseEvent("click", true, true, window, 
    0, 0, 0, 0, 0, false, false, false, false, 0, null); 
anchorObj.dispatchEvent(evt); 

这对我来说似乎太丑陋了.我不知道它是多么兼容,我想尽可能避免编写特定于浏览器的代码.

我不能使用location.href = anchorObj.href; 因为它不处理"目标"属性.我可以根据目标值进行一些硬编码,但我也想避免这种情况.

有建议切换到JQuery,但我不确定它处理目标属性有多好,因为我之前没有使用它.



1> Crescent Fre..:

这是一个完整的测试用例,模拟click事件,调用附加的所有处理程序(但它们已被附加),维护"target"属性("srcElement"在IE中),像正常事件一样的泡沫,并模拟IE的递归防止.在FF 2,Chrome 2.0,Opera 9.10以及IE(6)中测试过:








Normal link


在这里演示.

它通过检查事件的target属性(在传播期间保持不变)来检查启动模拟点击的事件对象,从而避免非IE浏览器中的递归.

IE显然在内部持有对其全局event对象的引用.DOM级别2没有定义这样的全局变量,因此模拟器必须传入其本地副本event.



2> Chris Shouts..:

引用自https://developer.mozilla.org/en/DOM/element.click

click方法旨在与按钮,复选框,无线电,重置或提交类型的INPUT元素一起使用.Gecko没有对可能期望响应鼠标点击的其他元素(如链接(A元素))实现click方法,也不会触发其他元素的click事件.

非Gecko DOM可能表现不同.

不幸的是,听起来您已经发现了解决问题的最佳方案.

作为旁注,我同意你的解决方案看起来不太理想,但是如果你将一个功能封装在一个方法中(就像JQuery会做的那样),那就不是那么糟糕了.



3> Peter Bailey..:

好吧,你可以通过jQuery快速测试点击调度

$('#link-id').click();

如果您仍然遇到点击尊重目标的问题,您可以随时执行此操作

$('#link-id').click( function( event, anchor )
{
  window.open( anchor.href, anchor.target, '' );
  event.preventDefault();
  return false;
});



4> Gaurav Gandh..:

有一种更简单的方法来实现它,

HTML

Bootstrap is life !

JavaScript的

// Simulating click after 3 seconds
setTimeout(function(){
  document.getElementById('fooLinkID').click();
}, 3 * 1000);

使用普通的javascript来模拟点击以及寻址目标属性.

您可以在jsFiddle上查看这里的工作示例.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有