javascript-click()不适用于链接
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-click()不适用于链接,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3241字,纯文字阅读大概需要5分钟。
内容图文
我有一个页面,其中包含一些链接,这些链接都像这样:
<a href="/" class="answer-item" rel="0">10</a>
我想使用click()函数来模拟用户对其中之一的点击,但是在我的测试中似乎不起作用.
//Evaluate a mathematical expression from another part of the page
var numberAnswer = eval(document.getElementById("question-title").getElementsByTagName("b")[0].innerHTML);
//Builds an array with the links that may match the expression
var choices = document.getElementsByClassName('answer-item');
//Iterates through array to find a match then clicks it
for(var i in choices){
if(choices[i].innerHTML == numberAnswer){
choices[i].click();
break;
}
}
我确定choices [i]是正确的元素.
Firefox不执行任何操作,Opera不执行任何操作,而click()在Chrome中不可用(我认为).
此外,我试图以这种形式使用dispatchEvent():
var evt = document.createEvent('MouseEvents');
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
choices[i].dispatchEvent(evt);
在Firefox和Chrome中,这显然返回了true,但未进行任何更改.
最麻烦的是,只有href属性的链接与.click()一起正常工作.
解决方法:
编辑
根据评论区域中的讨论,似乎此答案中使用的行为是非标准的,或者至少在用户代理之间不一致.我正在进一步研究这个问题;如果您使用此答案中的信息,请在所有浏览器中仔细检查代码,以确保其工作正常.
编辑2
根据OP的评论,这里有一种“使之成为现实”的方法.它有一些缺点,即您的绑定事件无法调用preventDefault -此方法将不遵守它.您可以构建某种事件包装程序,或许可以处理此问题……无论如何,这是代码和小提琴:
HTML:
<br><br>
<!-- I am totally misusing this API! -->
<a href="http://jsfiddle.net/echo/js/?delay=0&js=The link was followed;" id="progra_link">Some link with an event that uses preventDefault()</a>
<br><br>
<button id="doit_btn">Programmatically click the link</button>
脚本:
function do_program_click () {
var lnk = document.getElementById('progra_link');
var loc = lnk.href;
if (!loc)
return false;
// call this to fire events
lnk.click();
// then follow the link
document.location = loc;
return;
};
function addEvent(element, evnt, funct){
if (element.attachEvent)
return element.attachEvent('on'+evnt, funct);
else
return element.addEventListener(evnt, funct, false);
}
// bind an event to the link to test force event trigger
addEvent(
document.getElementById('progra_link'),
'click',
function (e) {
e.preventDefault();
alert('Testing element click event, default action should have been stopped');
return false;
}
);
// bind event to the leeroy button
addEvent(
document.getElementById('doit_btn'),
'click',
do_program_click
);
jsFiddle:http://jsfiddle.net/CHMLh/
原始答案
您的示例代码不完整.如果我仅是基础知识,那么它可以正常工作:
<script>
var lnk = document.getElementById('test');
lnk.click();
</script>
<a id="test" href="/" class="answer-item" rel="0">test link</a>
js小提琴:http://jsfiddle.net/cgejS/
我会重新评估您的假设,即您正在处理正确的dom元素.
与此无关的是:
var numberAnswer = eval(document.getElementById("question-title").getElementsByTagName("b")[0].innerHTML);
… 什么?评估是邪恶的-如果您出于任何原因使用它,请问您是否使用正确的方法.您是否要从字符串中获取整数?请参阅parseInt(docs),此工具是正确的工具:
// this line is still failure-prone...
var ele = document.getElementById("question-title").getElementsByTagName("b")[0];
var numberAnswer = 0;
if (ele)
numberAnswer = parseInt(ele.innerHTML);
内容总结
以上是互联网集市为您收集整理的javascript-click()不适用于链接全部内容,希望文章能够帮你解决javascript-click()不适用于链接所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。