2013-12-14 48 views
3

我有一個按鈕數組:

var buttonnumber = ["#btn1", "#btn2", "#btn3", "#btn4", "#btn5"]; 

如果其中一個被點擊我要得到他們的指數值陣列中:

$("#btn1, #btn2, #btn3, #btn4, #btn5").click(function() { 
var y = buttonnumber.indexOf(this); //($(this)) doesn't work either! 
}); 

這不起作用 我使用了jQuery方法的.index()代替:

var y = $(this).index(); 

但我寧願不是因爲html中按鈕的順序與數組中不一樣。

感謝您的幫助!

+0

'this'是DOM元素,而不是它的ID。 –

回答

2

由於您的陣列具有帶哈希標識,那麼你需要搜索ID與哈希,不元素本身。解決辦法有兩個:

讓你的按鈕數組引用的對象,而不是ID的

var buttonnumber = [$("#btn1"), $("#btn2"), $("#btn3"), $("#btn4"), $("#btn5")]; 

$("#btn1, #btn2, #btn3, #btn4, #btn5").click(function() { 
    var y = buttonnumber.indexOf($(this)); 
}); 

還是做的indexOf對你點擊的對象ID:

var buttonnumber = ["#btn1", "#btn2", "#btn3", "#btn4", "#btn5"]; 

$("#btn1, #btn2, #btn3, #btn4, #btn5").click(function() { 
    var y = buttonnumber.indexOf("#" + this.id); 
}); 

你也可以寫該點擊選擇器爲:

var buttonnumber = ["#btn1", "#btn2", "#btn3", "#btn4", "#btn5"]; 

$(buttonnumber.join()).click(function() { 
    var y = buttonnumber.indexOf("#" + this.id); 
}); 

在現代瀏覽器中,您也不再是n eed jQuery的東西是這樣的:

var buttonnumber = ["#btn1", "#btn2", "#btn3", "#btn4", "#btn5"]; 
// cast nodelist that's returned from querySelectorAll to array 
Array.prototype.slice.call(document.querySelectorAll(buttonNumber.join())) 
    .forEach(el => { 
     el.addEventListener("click", (event) => { 
      let y = buttonnumber.indexOf("#" + this.id); 
     }); 
    }) 
+0

感謝您快速詳盡的回答!工程100%! – LeeCanvas

2
buttonnumber.indexOf(this); 

原本應該

buttonnumber.indexOf('#' + this.id); 

this對應於DOM元件。需要獲取該元素的id並獲取基於它的索引。

0

獲取點擊的項目ID與$(this).attr('id')屬性,並從字符串獲得索引...

0
$("#btn1, #btn2, #btn3, #btn4, #btn5").click(function() { 
    var y = buttonnumber.indexOf($(this).prop("id")); 
}); 
相關問題