Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery事件绑定的问题 $(“#画布”).mousedown(函数(e){ 对于(i=0;i mouseX&&pointX-5mouseY&&pointY-5_Javascript_Jquery_Javascript Events - Fatal编程技术网

Javascript jQuery事件绑定的问题 $(“#画布”).mousedown(函数(e){ 对于(i=0;i mouseX&&pointX-5mouseY&&pointY-5

Javascript jQuery事件绑定的问题 $(“#画布”).mousedown(函数(e){ 对于(i=0;i mouseX&&pointX-5mouseY&&pointY-5,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,嗨,由于某种原因,当我试图在我的'mousemove'函数中使用for循环中的变量'i'时,它是未定义的。如果我把它赋给另一个变量,因为某种原因,我不想这样做,因为它看起来不必要。任何帮助都将不胜感激。我不能确定,但我相信是的,因为您的I变量是全局变量。始终使用var关键字声明不应为global的变量。比如说, $("#canvas").mousedown(function(e) { for(i=0; i<allPoints[0].length; i++) { var

嗨,由于某种原因,当我试图在我的'mousemove'函数中使用for循环中的变量'i'时,它是未定义的。如果我把它赋给另一个变量,因为某种原因,我不想这样做,因为它看起来不必要。任何帮助都将不胜感激。

我不能确定,但我相信是的,因为您的
I
变量是全局变量。始终使用
var
关键字声明不应为
global
的变量。比如说,

     $("#canvas").mousedown(function(e) {
  for(i=0; i<allPoints[0].length; i++) {
   var pointX = controlPoint[i].x;
   var pointY = controlPoint[i].y;
   var mouseX = e.pageX - this.offsetLeft;
   var mouseY = e.pageY - this.offsetTop;
   if(pointX + 5 > mouseX && pointX - 5 < mouseX && pointY + 5 > mouseY && pointY - 5 < mouseY) {
    var testest = i;
    $(this).bind('mousemove', function(e) {
    //'i' is undefined here
    //'testest' is defined
     controlPoint[testest].x = e.pageX - this.offsetLeft;
     controlPoint[testest].y = e.pageY - this.offsetTop;
    });
   }
  }
 }).mouseup(function(e){
  $(this).unbind('mousemove');
 });

for(var i=0;ii未定义的事实非常奇怪。唯一可能发生这种情况的方法是在代码中的其他地方将其设置为未定义。如果全局变量i从未在其他地方使用,则i的值将始终等于所有点[0].length在“mousemove”回调中,因为您正在围绕i变量创建一个闭包,该变量将设置为allPoints[0].length。另外,请注意testest将被提升到mousedown回调的顶部,因此mousemove回调中testest的值将始终是mousemove回调中设置的最后一个值。

谢谢,我不知道。不幸的是,这并没有解决问题,我更改了如您所说,将“i=0”改为“var i=0”,但“i”仍然未定义。此外,在脚本的其余部分中,除了函数参数之外,没有使用“i”,据我所知,函数参数始终是本地的。您确定吗?请尝试将所有
i
改为
abc
for(var i=0; i<allPoints[0].length; i++) {