2012-04-03 72 views
-2

我有一個包含按鈕的ID的按鈕數組。然後我循環它們並添加一個點擊監聽器。看來我應該能夠使用.each()什麼的循環做到這一點沒有,但我不能讓它使用.each()改進此Jquery代碼

var settingScreenButtons = ["btn_1","btn_2","btn_3","btn_4"]; 

for(var i=0;i<settingScreenButtons.length;i++){ 
     $("#"+settingScreenButtons[i]).click(function(){ 
      alert($(this).attr("id")); 

     }); 
    } 

回答

4

工作,你可以在一個jQuery對象中選擇多個元素,並結合他們一下子:

$("#btn_1, #btn_2, #btn_3, #btn_4").click(function() { 
    alert(this.id); 
}); 

儘管如果事件監聽器較少,它會更好。假設你的HTML看起來像這樣:

<div id="container"> 
    <a href="#" id="btn_1" class="btn">Button 1</a> 
    <a href="#" id="btn_2" class="btn">Button 2</a> 
    <a href="#" id="btn_3" class="btn">Button 3</a> 
    <a href="#" id="btn_4" class="btn">Button 4</a> 
</div> 

您可以使用jQuery的事件代表團來解決更有效:

$('#container').on('click', '.btn', function() { 
    alert(this.id); 
}); 

或者,如果你真的需要這種形式在你的問題,你可以使用each,但它必須是$.each

$.each(settingScreenButtons, function(index, id) { 
    $('#' + id).click(function() { 
     alert(this.id); 
    }); 
}); 
+0

是this.id或$(this).attr(「id」)? – Shyju 2012-04-03 03:06:17

+1

@Shyju:他們是相同的。前者使用純DOM屬性;後者使用jQuery。 – icktoofay 2012-04-03 03:08:00

+0

謝謝。我從來不知道這一點。我今天知道了。感謝 – Shyju 2012-04-03 03:18:15

0

這裏的另一種選擇,開始的數組id名字:

var settingScreenButtons = ["btn_1","btn_2","btn_3","btn_4"]; 

$("#" + settingScreenButtons.join(", #")).click(function() { 
    alert(this.id); 
}); 
+0

感謝您的幫助。 – james 2012-04-11 09:01:42