2011-08-23 104 views
0

我正在尝试制作一个网站。我把的addEventListener更多的元素在函数调用多次:Javascript:我可以避免关闭吗?

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> 

但有一个问题:只有最后一个元素得到事件侦听器......别人把鼠标在它以后什么也不做。 然后我google了一下,发现了关闭和变量如何保存,即使函数返回后...我不明白一切,但我只想了解如何将事件侦听器放在function2中。你可以帮我吗? 可能你注意到了:我是新手。对不起,如果问题很愚蠢或者没有意义。如果你需要更多的细节,我会把我的整个代码,但它有变量和罗马尼亚语的评论,所以我不知道你是否会理解它。对不起,我的英语不好,并提前谢谢你。

+1

是的,你应该添加更多的代码。您当前的代码不会显示有关事件处理程序的任何问题。 –

+1

代码似乎已被切断,你可以发布你在addEventListener调用中给出的事件处理函数吗? – nkassis

+0

看起来应该可以工作。也许你需要'var idImag = 0;'顶部?不要说'var'应该只是指'window.idImg',所以你可以使用该引用,并确保'window.idImg'正在递增 –

回答

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); 
} 
0

它看起来像你只是在意图像的id,它可以通过元素的id属性。

因此,你可以这样做:

document.getElementById("holder" + idImag).addEventListener(
    'mouseover', 
    function(){ 
     var id = this.id; 
     /* Then strip off "holder" from the front of that string */ 
    } 
); 
0

这看起来是正确的,因为它会调用document.getElementById("holder0").addEventListener(…),然后它会调用document.getElementById("holder1").addEventListener(…)。关闭不是你的问题。

例如,您可以通过使用console.log来记录要添加事件侦听器的元素(您需要安装Firebug或Chrome的开发人员控制台处于打开状态)来验证此情况。

也许会将代码粘贴到http://jsfiddle.net/那么我们可以试试吗?

相关问题