EDIT
根据评论区的讨论,这个答案中使用的行为似乎是非标准的,或者至少在用户代理之间不一致。我正在进一步研究这个问题;如果您使用此答案中的信息,请在所有浏览器中仔细检查您的代码,以确保其按预期工作。
EDIT 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>
Script:
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
);
js小提琴:http://jsfiddle.net/CHMLh/ 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/ http://jsfiddle.net/cgejS/
我会重新评估您正在处理正确的 dom 元素的假设。
在一个不相关的注释中,这个:
var numberAnswer = eval(document.getElementById("question-title").getElementsByTagName("b")[0].innerHTML);
... 什么?eval
是邪恶的——如果您出于任何原因使用过它,请质疑您的方法是否正确。您是否想从字符串中获取整数?看parseInt
(docs https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt),适合这项工作的工具:
// this line is still failure-prone...
var ele = document.getElementById("question-title").getElementsByTagName("b")[0];
var numberAnswer = 0;
if (ele)
numberAnswer = parseInt(ele.innerHTML);