如何模拟对锚标记的点击?

如何模拟对锚标记的点击?,第1张

如何模拟对锚标记的点击?

这是一个完整的测试用例,它可以模拟

click
事件,调用所有附加的处理程序(无论它们是否已附加),维护
"target"
属性(
"srcElement"
在IE中),像正常事件一样冒泡并模拟IE的递归预防。经过FF
2,Chrome 2.0,Opera 9.10和IE(6)的测试:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><script>function fakeClick(event, anchorObj) {  if (anchorObj.click) {    anchorObj.click()  } else if(document.createEvent) {    if(event.target !== anchorObj) {      var evt = document.createEvent("MouseEvents");       evt.initMouseEvent("click", true, true, window,0, 0, 0, 0, 0, false, false, false, false, 0, null);       var allowDefault = anchorObj.dispatchEvent(evt);      // you can check allowDefault for false to see if      // any handler called evt.preventDefault().      // Firefox will *not* redirect to anchorObj.href      // for you. However every other browser will.    }  }}</script></head><body><div onclick="alert('Container clicked')">  <a id="link" href="#" onclick="alert((event.target || event.srcElement).innerHTML)">Normal link</a></div><button type="button" onclick="fakeClick(event, document.getElementById('link'))">  Fake Click on Normal link</button><br /><br /><div onclick="alert('Container clicked')">    <div onclick="fakeClick(event, this.getElementsByTagName('a')[0])"><a id="link2" href="#" onclick="alert('foo')">Embedded link</a></div></div><button type="button" onclick="fakeClick(event, document.getElementById('link2'))">Fake Click on Embedded link</button></body></html>

演示在这里。

通过检查引发模拟点击的事件对象,检查事件的

target
属性(在传播过程中保持不变),它避免了在非IE浏览器中的递归。

显然IE会在内部进行对其全局

event
对象的引用。DOM级别2没有定义此类全局变量,因此出于这个原因,模拟器必须传递其的本地副本
event



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5620935.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存