2010-11-28 3 views
0
 $("#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'루프에서 'i'변수를 사용하려고하면 'mousemove'함수가 정의되지 않습니다. 만약 내가 다른 변수에 할당하기 전에 어떤 이유로 작동하지만, 불필요하게 보이기 때문에 그렇게하고 싶지는 않습니다. 어떤 도움이라도 대단히 감사하겠습니다.jQuery 이벤트 바인딩 문제

답변

1

귀하의 i 변수가 이고이기 때문에 나는 확실히 알 수 없습니다. 항상 global이 아니어야하고 var 키워드가있는 변수를 선언하십시오. 예를 들어,

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

나는 응용 프로그램이 다른 곳에서 변수 i 수정하고 다른 변수에 할당하는 문제를 해결하기 위해 보인다 이유라고 생각합니다. 실제 해결책은 로컬 변수를 var 키워드와 함께 사용하는 것입니다.

+0

감사합니다. 그 사실을 알지 못했습니다. 불행히도 그 문제를 해결하지 못했습니다, 당신이 말한 것처럼 'i = 0'을 'var i = 0'으로 변경했지만 'i'는 아직 정의되지 않았습니다. 또한 'i'는 나머지 스크립트에서 함수 매개 변수 이외에는 사용되지 않습니다. 이는 항상 알고있는 한 로컬입니다. – Ian

+0

정말입니까? 모든'i'를'abc'으로 변경해보십시오. – Tower

0

내가 정의되지 않았다는 사실은 매우 기괴합니다. 이것이 발생할 수있는 유일한 방법은 코드의 다른 곳에서 정의되지 않은 것으로 설정되는 경우입니다. 전역 변수 i가 다른 곳에서는 사용되지 않는다면, i 변수 주위에 클로저를 생성하기 때문에 i 값은 항상 'mousemove'콜백 내부의 allPoints [0] .length와 같습니다. mousedown 콜백의 끝까지 allPoints [0] .length. 또한 testest가 mousedown 콜백의 맨 위로 올라갈 것이므로 mousemove 콜백 내부의 testest 값은 항상 mousemove 콜백 내에 설정된 마지막 값이됩니다.

관련 문제