Javascript:我可以避免闭包吗?
我正在尝试建立一个网站。我将addEventListener添加到一个名为“更多次”的函数中的更多元素:Javascript:我可以避免闭包吗?,javascript,Javascript,我正在尝试建立一个网站。我将addEventListener添加到一个名为“更多次”的函数中的更多元素: idImag = 0; function function1() { //do something function2() } function function2() { //do something document.getElementById("holder" + id
idImag = 0;
function function1()
{
//do something
function2()
}
function function2()
{
//do something
document.getElementById("holder" + idImag).addEventListener('mouseover',function(){
idImag++;
alert('It works');
}
function3(event)
{
alert(3);
}
function1();
function1();
<div id="holder0">Dog</div>
<div id="holder1">Chicken</div>
<div id="holder2">Cow</div>
idImag=0;
函数function1()
{
//做点什么
职能2()
}
函数function2()
{
//做点什么
document.getElementById(“holder”+idImag).addEventListener('mouseover',function(){
idImag++;
警报(“它工作”);
}
职能3(活动)
{
警惕(3);
}
功能1();
功能1();
狗
鸡
母牛
但有一个问题:只有最后一个元素获得事件侦听器……其他元素在将鼠标放在它上面后什么也不做。
然后我在谷歌上搜索了一下,发现了闭包以及函数返回后变量是如何保存的……我不完全理解,但我只是想知道如何在函数2中放置事件侦听器。你能帮我吗?
也许你注意到了:我是一个新手。如果这个问题很愚蠢或者没有意义,我很抱歉。如果你需要更多的细节,我会把我的整个代码都写下来,但是它有罗马尼亚语的变量和注释,所以我不确定你是否能理解。对不起我的英语不好,提前谢谢你。为什么不写一个for循环
function function3 (event) {
alert(3);
}
for (var idImag = 0; i< numberOfHolders; i++) {
//do something1
//do something2
document.getElementById("holder" + idImag).addEventListener('mouseover',function3);
}
功能3(事件){
警惕(3);
}
对于(var idImag=0;i
看起来您只关心图像id,该id可通过元素的id属性获得
因此,您可以:
document.getElementById("holder" + idImag).addEventListener(
'mouseover',
function(){
var id = this.id;
/* Then strip off "holder" from the front of that string */
}
);
这看起来是正确的,因为它将调用
document.getElementById(“holder0”).addEventListener(…)
,然后它将调用document.getElementById(“holder1”).addEventListener(…)
。闭包不是您的问题
您可以通过使用console.log
记录要添加事件侦听器的元素来验证这一点(您需要安装Firebug,或者打开Chrome的开发者控制台)
可能将代码粘贴到以便我们可以尝试它?是的,您应该添加更多的代码。您当前的代码没有显示任何有关事件处理程序的问题。代码似乎已被切断,您是否可以在addEventListener调用中发布您提供的事件处理程序函数?看起来应该可以工作。可能您需要
var idImag=0;
在to处p?不说var
应该只是指window.idImg
,因此您可以使用该引用,并确保window.idImg
是递增的。此外,函数3
函数(?)不解析,与其余部分无关。请发布真实的、可解析的代码。说真的,要么发布实际复制您的问题的有效代码,要么不要麻烦。