gpt4 book ai didi

javascript - 事件监听器在没有事件的情况下执行并在 HTML 集合中循环

转载 作者:搜寻专家 更新时间:2023-10-31 23:00:53 24 4
gpt4 key购买 nike

我正在尝试编写一个循环来初始化 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");
}

并在我点击带有 class="JS"的元素时运行 testfunc()。

document.write(JS_elements.item(y).innerHTML); 行正确执行,所以我知道我正在获取正确的对象。遗憾的是,注释行导致此中断:testfunc() 在页面加载时自动运行三次。

谁能解释为什么会这样?我唯一能想到的是,出于某种原因,“点击”被评估为 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>

最佳答案

改变这个:

JS_elements.item(y).addEventListener("click",testfunc());

为此:

JS_elements.item(y).addEventListener("click",testfunc);

() 使函数立即执行,并将返回结果传递给 addEventListener()。那不是你想要的。相反,您想传递一个函数引用,它应该只是函数 testfunc 的名称,后面没有 ()


如果你想将参数传递给 testfunc 并且它们是所有事件处理程序的相同参数,那么你可以创建一个中间匿名函数:

JS_elements.item(y).addEventListener("click",function() {
testfunc("whatever");
});

关于javascript - 事件监听器在没有事件的情况下执行并在 HTML 集合中循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30701553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com