我想在click事件中处理带有编号ID的div:
$(function() {
for (var i = 1; i != 10; ++i) {
$("#div" + i).live('click', function () {
//...
console.log(i); // always prints 10
});
}
});
// html
<div id="div1">...</div>
<div id="div2">...</div>
etc.
我原以为每个div上的click事件都会触发自己的事件处理程序。但事实并非如此。
请修理。
答案 0 :(得分:1)
使用闭包:
$(function () {
for (var i = 1; i < 11; i++) {
(function (i) {
$("#div" + i).live('click', function () {
//...
console.log(i); // always prints 10
});
}(i));
}
});
但是根据你的jquery版本,你可以使用as.on()(委托)或.delegate()方法作为选择器:'[id^=div]'
答案 1 :(得分:0)
for (var i = 1; i != 10; ++i)
的
for (var i = 1; i != 10; i++)
答案 2 :(得分:0)
循环保持最后一个值,因为在循环结束后调用live事件。您需要将值传递给循环中的live事件,如下所示:
$(function() {
for (var i = 1; i != 10; ++i) {
$("#div" + i).live('click', {i: i}, function (e) {
//...
console.log(e.data.i); // prints correct value
});
}
});
答案 3 :(得分:0)
$(function() {
$("div[id^=div]").click( function(){
var id = $(this).attr('id').replace('div', '');
console.log(id);
});
});
我发现这种检查点击的方式更加紧凑和简单,这也是一个有效的fiddle,虽然已经有答案为什么你的i变量坚持所以随意使用哪种方法似乎合适。