循环中的jquery函数不迭代

循环中的jquery函数不迭代,jquery,iteration,Jquery,Iteration,我的代码有问题,title属性只显示16,而不显示从1到15的所有值。为什么有人能提出我做错了什么 我的代码 x=1; while(x <= 15) { $("td#id"+x).mouseover(function(x){ $(this).attr('title', x) }); x++; } x=1; 而(x作为事件处理程序提供给jquery的函数保留一个指针,指向定义它的外部块及其(活动)变量。闭包就是这样工作的 所以当它

我的代码有问题,
title
属性只显示
16
,而不显示从
1
15
的所有值。为什么有人能提出我做错了什么

我的代码

 x=1;
 while(x <= 15)
 {
     $("td#id"+x).mouseover(function(x){
     $(this).attr('title', x)           
   });
   x++;
}
x=1;

而(x作为事件处理程序提供给jquery的函数保留一个指针,指向定义它的外部块及其(活动)变量。闭包就是这样工作的

所以当它被执行时,x是15

我知道大多数javascript开发人员不知道这是如何工作的,但这是一件非常有趣的事情:


编辑:我不会在这里添加我打算添加的常见修复程序,正如Alnitak在我面前指出的那样,在这种情况下回调实际上是完全无用的;)

这是非常常见的“在回调中使用循环变量”问题

使用jQuery时,最简单的修复方法是处理程序的
data
参数:

 var x=1;
 while (x <= 15) {
     $("td#id"+x).mouseover({ x: x }, function(ev) {
         this.title = ev.data.x;        
     });
     x++;
 }

mouseover
处理程序中执行此操作实际上不会破坏任何东西,但这意味着您已经注册了一个将被调用的事件处理程序(并更新DOM)每次你从一个单元格移动到另一个单元格时,都会一遍又一遍。

你的简单性让我惊讶+1事件数据应该放在第一位:)谢谢..你花了一秒钟时间才解决了一个我挣扎了一个多小时的问题。再次感谢..@learner你所做的事情没有多大意义。我认为如果你能给我们更多的细节,可以做得更好。(编辑:查看本文后面的部分)学习者:阅读闭包。当您理解Javascript时,它是一个完全不同的世界。这是更大脚本的一部分,表的coulmns是动态生成的,并分配了id,title属性的值为x,这是迭代器,因此如果例如someval someval。。。。某地
for (var x = 1; x <= 15; ++x) {
    document.getElementById('id' + x).title = x;
}