2010-02-18 242 views
1

我該如何添加一個監聽器來懸停在這樣的div標籤上:事件監聽器循環

| btn1 | btn2 | btn3 | btn4 |

我想添加一個偵聽器,通過它們循環,就像我在下面顯示,然後應用一個函數,如果它有鼠標懸停。

function listen() { 
for (i=1;i<=10;i++) { 
    wat = document.getElementById('btn'+i); 
    wat.addEventListener('mouseover',functionwat,false); 
} 
} 

我有這一點,它不工作了,是它被調用函數聽(),因爲我在那裏加一個警告的事,以確保其正常工作,functionwat作品的權利了。任何想法我做錯了?

+0

是'範圍functionwat'? – 2010-02-18 01:30:24

+0

對不起,我不知道範圍是什麼,但它是正確的聽()函數 – David 2010-02-18 01:31:52

+0

大衛,請閱讀並再次回覆:http://en.wikipedia.org/wiki/Scope_%28programming%29 – 2010-02-18 01:34:00

回答

0

而是循環的每個項目和附加事件的重視的情況下,考慮實現事件代表團。由於涉及您的情況,讓假設你使用jQuery,併爲您的跟隨按鈕的標記:

<div id="btnList"> 
<button id="btn1">btn1</button> 
<button id="btn2">btn2</button> 
<button id="btn3">btn3</button> 
<button id="btn4">btn4</button> 
</div> 

的JavaScript:

$(document).ready(function() 
{ 
    $("#btnList button").bind(
      "mouseenter mouseleave", 
      function(e) { 
      //do something based on target/id 
      alert(this.id); 
      }); 
}); 
+0

爲什麼假設他使用jQuery? jQuery就像Javascript中的另一種語言。 – levik 2010-02-18 05:33:25

3

你使用什麼瀏覽器?註冊事件處理程序是不同的瀏覽器到瀏覽器。 PPK對瀏覽器事件here有一些很好的討論。

簡而言之,這是用於添加處理程序的跨瀏覽器代碼。

function addEventSimple(obj,evt,fn) { 
    if (obj.addEventListener) 
     obj.addEventListener(evt,fn,false); 
    else if (obj.attachEvent) 
     obj.attachEvent('on'+evt,fn); 
} 

現在你可以用

function listen() { 
    for (i=1;i<=10;i++) { 
     wat = document.getElementById('btn'+i);  
     addEventSimple(wat, 'mouseenter', functionwat); 
    } 
} 
+0

好的嘗試了這一點,仍然沒有運氣。我把addeventsimple函數上面的函數listen()正確嗎? – David 2010-02-18 01:39:27

0

看來,你可能會與你的變量有點凌亂。例如,您不使用var來聲明i,所以它可能會在全局名稱空間中結束。在此之後,你確定functionwat真的是listen()執行時的一個函數嗎?

您可以通過檢查;

function listen() { 

    if(typeof functionwat !== "function") { 
     alert("functionwat is not a function, but a " + typeof functionwat); 
    } 

    for (var i = 1; i <= 10; ++i) { 
     wat = document.getElementById("btn"+i); 
     wat.addEventListener("mouseover", functionwat, false); 
    } 
} 
0

大衛,

你的運氣不好,因爲我是你使用的瀏覽器是不是IE幾乎可以肯定。您的事件不會在非IE瀏覽器中觸發,因爲事件「mouseenter」僅在IE中暴露。要使其工作,您需要更改「mouseenter」以使用「mouseover」。

function listen() { 
    for (i=1;i<=10;i++) { 
     wat = document.getElementById('btn'+i);  
     addEventSimple(wat, 'mouseenter', functionwat); 
    } 
} 

function listen() { 
    for (i=1;i<=10;i++) { 
     wat = document.getElementById('btn'+i); 
     if(wat) { addEventSimple(wat, 'mouseover', functionwat); } 
    } 
}