Not*_*ner 3 html javascript for-loop addeventlistener
我正在尝试编写一个循环来初始化 JavaScript 中的事件处理程序。
我想我做错了什么,因为我的调试功能在没有事件(点击)发生的情况下被激活。
我想做的是这样的:
var JS_elements = document.getElementsByClassName("JS")
for (y = 0; y < JS_elements.length; y++){
document.write(JS_elements.item(y).innerHTML);
JS_elements.item(y).addEventListener("click",testfunc());
}
function testfunc() {
alert("TestFunc");
}
Run Code Online (Sandbox Code Playgroud)
当我点击一个 class="JS" 的元素时,让 testfunc() 运行。
线document.write(JS_elements.item(y).innerHTML);线正确地执行,所以我知道我得到正确的对象。可悲的是,注释行导致此中断: testfunc() 在页面加载时自动运行 3 次。
谁能解释为什么会这样?我唯一能想到的是“点击”由于true某种原因被评估。
HTML:
<header>
<hr>
<p>- Header Background Color Controller -</p>
<table>
<tr>
<td>Javascript Controller:</td>
<td class="JS">Red
<input type="hidden" value='false'>
</td>
<td class="JS">Green
<input type="hidden" value='false'>
</td>
<td class="JS">Blue
<input type="hidden" value='false'>
</td>
</tr>
<tr>
<td>jQuery Controller:</td>
<td class="jQ" value=false>Red</td>
<td class="jQ" value=false>Green</td>
<td class="jQ" value=false>Blue</td>
<tr>
</table>
<hr>
</header>
Run Code Online (Sandbox Code Playgroud)
改变这个:
JS_elements.item(y).addEventListener("click",testfunc());
Run Code Online (Sandbox Code Playgroud)
对此:
JS_elements.item(y).addEventListener("click",testfunc);
Run Code Online (Sandbox Code Playgroud)
将()导致要立即执行的功能和返回结果传递给addEventListener()。那不是你想要的。相反,您希望传递一个函数引用,该引用应该只是函数的名称,而testfunc不要在()其后。
如果您想将参数传递testfunc给所有事件处理程序并且它们是相同的参数,那么您可以创建一个中间匿名函数:
JS_elements.item(y).addEventListener("click",function() {
testfunc("whatever");
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1515 次 |
| 最近记录: |