2011-08-23 108 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/那麼我們可以試試嗎?

相關問題