2013-12-14 41 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")); 
}); 
相关问题