Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 事件侦听器在没有事件的情况下执行并在HTML集合中循环_Javascript_Html_For Loop_Addeventlistener - Fatal编程技术网

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

Javascript 事件侦听器在没有事件的情况下执行并在HTML集合中循环,javascript,html,for-loop,addeventlistener,Javascript,Html,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(

我试图编写一个循环来初始化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");
}
更改此项:

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");
});
只要这样做:
JS_elements.item(y).addEventListener(“单击”,testfunc);

您知道函数名后面的
()
是什么吗
testfunc
不返回函数,为什么在设置事件侦听器时调用它?我只是使用
testfunc()
进行调试。请显示您拥有的真实代码。注意,
document.write
无论如何都会破坏代码,如果它是在页面解析后执行的。这是我拥有的真实代码。那么请重新阅读我的第一条评论。现在我面临的下一个难题是:如何调用一个带参数的函数?@BrandonHastings-您必须准确地向我们展示您试图传递给它的内容,以及您是否试图将相同的内容传递给每个事件处理程序不管是不是每次。根据具体情况,有多种方法可以解决这个问题。@BrandonHastings-我在回答中添加了一个关于
testfunc
的参数示例。
JS_elements.item(y).addEventListener("click",function() {
    testfunc("whatever");
});