一个回调 Javascript 的一个实例

One instance for one callback Javascript

提问人:Valentin S. 提问时间:8/2/2022 更新时间:8/2/2022 访问量:37

问:

我有这个代码

function test(param){
    console.log(param);
}

$('div').each(function(){
     div_id = $(this).attr('id')
     $(this).on('mousemove', function(){
          test(div_id)
     });
});

但是在我的 中,我总是有最后一个值(最后一个 div 的 id)。console.log

如何每次都有回调函数的“一个实例”?

谢谢!

JavaScript jQuery 回调

评论

1赞 Chris Li 8/2/2022
div_id = $(this).attr('id')const div_id = $(this).attr('id')
1赞 Rory McCrossan 8/2/2022
您需要一个闭包来维护事件处理程序内的范围。但是,整个问题没有实际意义,因为您应该避免在事件中检索目标 divdiv_idmousemoveeach()this.idmousemove
1赞 Abhay Srivastav 8/2/2022
div_id是一个全局变量,它在循环中被覆盖,您应该将其更改为 或 。constlet
0赞 epascarello 8/2/2022
这就是我们定义变量的原因。这就是我们定义变量的原因。这就是我们定义变量的原因。这就是我们定义变量的原因。这就是我们定义变量的原因。在 IDE 中使用像 eslint 这样的工具,这样当你忘记定义变量时,它会对你大喊大叫。

答:

0赞 Mischa 8/2/2022 #1

您可以一次为多个元素添加事件处理程序。这样:

function test(param){
    console.log(param);
}

$('div').on('mousemove', function(){
    test($(this).attr('id'))
});

0赞 Maks_Matkov 8/2/2022 #2

您需要 make 局部变量来保存数据,而不是全局变量。因此,您可以重新获取div ID的数据

`
function test(param){
    console.log(param);
}

$('div').each(function(){
 add here --> **var** div_id = $(this).attr('id')
     $(this).on('mousemove', function(){
          test(div_id)
     });
});`