Проблемы с привязкой событий jQuery - PullRequest
0 голосов
/ 28 ноября 2010
     $("#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');
 });

Привет, почему-то, когда я пытаюсь использовать переменную 'i' из цикла for внутри моей функции 'mousemove', она не определена.Если я назначу его другой переменной до того, как это будет работать по какой-то причине, но я не хочу этого делать, потому что это кажется ненужным.Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 28 ноября 2010

Я не могу знать наверняка, но я верю, что это так, потому что ваша i переменная глобальная .Всегда объявляйте переменную, которая не должна быть global с ключевым словом var.Например,

for(var i=0; i<allPoints[0].length; i++) {

Я думаю, что ваше приложение изменяет переменную i где-то еще, и именно поэтому назначение его другой переменной, кажется, решает вашу проблему.Реальным решением здесь является использование локальной переменной с ключевым словом var.

0 голосов
/ 29 ноября 2010

Тот факт, что я не определен, очень странный. Это может произойти только в том случае, если в вашем коде установлено неопределенное значение. Если глобальная переменная i нигде больше не используется, то значение i всегда будет эквивалентно allPoints [0] .length внутри обратного вызова 'mousemove', потому что вы создаете замыкание вокруг переменной i, которое будет установлено на allPoints [0] .length к концу обратного вызова mousedown. Кроме того, имейте в виду, что testest будет поднят в верхнюю часть обратного вызова mousedown, поэтому значение testest внутри обратного вызова mousemove всегда будет последним значением, которое было установлено внутри обратного вызова mousemove.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...