它不起作用,因为您提供的函数click
具有对变量的持久引用,而不是创建函数时的副本。因此,当点击发生时,无论是哪一个,它都会看到then的值(可能是)。i
i
x.length
要修复它,在这种特定情况下最简单的方法是使用行的id
属性,因为您将信息保存到行:
$("#"+i).click(function(){ reWrite(this.id); return false; });
但是,我对您的代码完全正常工作感到有些惊讶,因为您id
在 CSS 选择器中使用了无效值。尽管您可以id
在 HTML 中具有以数字开头的值,但它们在 CSS 中无效,因此您与$()
( #0
,#1
等) 一起使用的选择器是无效的。jQuery 为您容忍它们(可能是偶然的,因为它优化了对调用的调用getElementById
),但我强烈建议不要这样做。
解决问题的各种其他方法(而不是使用id
):
使用额外的data
参数 jQuery 让你为事件指定:
$("#"+i).on('click', i, function(e){ reWrite(e.data); return false; });
让点击处理程序关闭一个不同的东西i
,而不是改变:
$("#"+i).on('click', i, buildHandler(i));
//...outside the loop:
function buildHandler(index) {
return function() {
reWrite(index);
return false;
};
}
在行上使用data-*
属性(但这很像使用id
)。
使用techfoobar 建议的旧式onxyz
处理程序(但没有不必要的,这与在 jQuery 中的含义不同):return false
document.write("<tr id='"+i+"' onclick='reWrite("+i+");'><td>");
我不是粉丝,但这是一种选择。
document.write
最后:如果你可以避免它,我建议不要使用它,而且你几乎总是可以避免它。