2013-12-14 3 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! 
}); 

Это не работает я использовал метод .index JQuery() вместо:

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

, но я бы предпочел не потому, что порядок кнопок в html не такой, как в массиве.

Благодарим за помощь!

+0

'this' является элементом DOM, а не его идентификатором. –

ответ

2

Поскольку ваш массив имеет идентификаторы с хэшей, то вам нужно искать ID с хэш, не сам элемент. Есть два решения:

Сделайте кнопку массива эталонные объекты вместо идентификаторов

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

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

или сделать IndexOf против идентификатора объекта вы щелкая:

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 элемента. Необходимо получить идентификатор этого элемента и получить индекс, основанный на нем.

0

Получить щелкнул элементы ID атрибута с $(this).attr('id') и получить индекс из строки ...

0
$("#btn1, #btn2, #btn3, #btn4, #btn5").click(function() { 
    var y = buttonnumber.indexOf($(this).prop("id")); 
}); 
Смежные вопросы