当我单击不同的链接时,jQuery事件侦听器会给我相同的值

当我单击不同的链接时,jQuery事件侦听器会给我相同的值,jquery,selector,Jquery,Selector,我对这个问题做了一点处理 问题是无论我点击什么项目,它都会不断显示最后一个id(10) 这快把我逼疯了!帮助这是因为您正在提醒一个预定义的变量。在for循环中,您正在更新id变量的值,在上一次迭代中,它的值变为10,并在每个元素的单击处理程序中警告此变量。您应该使用此.id: alert(this.id); 请注意,代码中的事件是未定义的,这是因为您正在警告一个预定义的变量。在for循环中,您正在更新id变量的值,在上一次迭代中,它的值变为10,并在每个元素的单击处理程序中警告此变量。您应

我对这个问题做了一点处理

问题是无论我点击什么项目,它都会不断显示最后一个id(10)


这快把我逼疯了!帮助

这是因为您正在提醒一个预定义的变量。在for循环中,您正在更新
id
变量的值,在上一次迭代中,它的值变为
10
,并在每个元素的单击处理程序中警告此变量。您应该使用
此.id

alert(this.id);


请注意,代码中的事件是
未定义的

,这是因为您正在警告一个预定义的变量。在for循环中,您正在更新
id
变量的值,在上一次迭代中,它的值变为
10
,并在每个元素的单击处理程序中警告此变量。您应该使用
此.id

alert(this.id);


请注意,代码中的事件是
未定义的

此问题可以归结为

var l = 10;
for(var i = 0; i < l; ++i) {
    $("#item-" + i).click(function() {
        alert(i);
    });
}
创建一个内部外壳,看起来很棘手,但它只是一个立即被调用的函数,返回click handler函数

var l = 10;
for(var i = 0; i < l; ++i) {
    $("#item-" + i).click((function(n) {
        return function() {
            alert(n);
        }
    })(i));
}
var l=10;
对于(变量i=0;i
你也可以写它

function handler(n) {
    return function() {
        alert(n);
    }
}
var l = 10;
for(var i = 0; i < l; ++i) {
    $("#item-" + i).click(handler(i));
}
函数处理程序(n){
返回函数(){
警报(n);
}
}
var l=10;
对于(变量i=0;i
或者你可以把整个绑定作为一个新函数

function bindElement(n) {
    $("#item-" + n).click(function() {
        alert(n);
    });
}
var l = 10;
for(var i = 0; i < l; ++i) {
    bindElement(i);
}
函数绑定元素(n){
$(“#项-”+n)。单击(函数(){
警报(n);
});
}
var l=10;
对于(变量i=0;i

注意:W3C规范规定id不应以数字6.2、项目符号2开头。要使HTML有效,应在其前面加一个字符串



这是一把小提琴,展示了不同的解决方案。问题可以归结为

var l = 10;
for(var i = 0; i < l; ++i) {
    $("#item-" + i).click(function() {
        alert(i);
    });
}
创建一个内部外壳,看起来很棘手,但它只是一个立即被调用的函数,返回click handler函数

var l = 10;
for(var i = 0; i < l; ++i) {
    $("#item-" + i).click((function(n) {
        return function() {
            alert(n);
        }
    })(i));
}
var l=10;
对于(变量i=0;i
你也可以写它

function handler(n) {
    return function() {
        alert(n);
    }
}
var l = 10;
for(var i = 0; i < l; ++i) {
    $("#item-" + i).click(handler(i));
}
函数处理程序(n){
返回函数(){
警报(n);
}
}
var l=10;
对于(变量i=0;i
或者你可以把整个绑定作为一个新函数

function bindElement(n) {
    $("#item-" + n).click(function() {
        alert(n);
    });
}
var l = 10;
for(var i = 0; i < l; ++i) {
    bindElement(i);
}
函数绑定元素(n){
$(“#项-”+n)。单击(函数(){
警报(n);
});
}
var l=10;
对于(变量i=0;i

注意:W3C规范规定id不应以数字6.2、项目符号2开头。要使HTML有效,应在其前面加一个字符串



这是一把小提琴,展示了不同的解决方案

谢谢你的回答,我仍然困惑,但它有效,我稍后会解决谢谢你的回答,我仍然困惑,但它有效,我稍后会解决+1对于你的示例代码和解释,现在是新西兰凌晨3点,我明天会详细查看你的答案,非常感谢你的示例代码和解释,现在是新西兰凌晨3点,我明天会详细查看你的答案,非常感谢