2010-11-28 78 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'); 
}); 

嗨,由於某種原因,當我嘗試從我的'mousemove'函數內的for循環使用變量'i'時,它是未定義的。如果我在出於某種原因之前將它分配給另一個變量,但我不想這樣做,因爲它似乎沒有必要。任何幫助將不勝感激。jQuery事件綁定的問題

回答

1

我無法確定,但我相信這是因爲你的i變量是global。總是聲明一個變量,該變量不應與var關鍵字一起使用global。例如,

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

我覺得你的應用程序修改變量i別的地方,這就是爲什麼它分配給另一個變量似乎解決你的問題的原因。真正的解決方案是使用本地變量和var關鍵字。

+0

謝謝你,不知道。不幸的是,這並沒有解決問題,我像你說的那樣將'i = 0'更改爲'var i = 0',但'我'仍然未定義。另外,就我所知,'i'在腳本的其餘部分中並沒有用於函數參數,而函數參數始終是本地的。 – Ian 2010-11-28 20:31:45

0

我未定義的事實是非常奇怪的。唯一的辦法就是如果它被設置爲未定義在代碼中的其他地方。如果全局變量i從未在其他地方使用,那麼i的值將始終等於'mousemove'回調中的allPoints [0] .length,因爲您要在i變量周圍創建閉包,該變量將設置爲在mousedown回調結束時allPoints [0] .length。另外,請注意,testest將被懸掛在mousedown回調的頂部,所以mousemove回調中testest的值將始終是在mousemove回調中設置的最後一個值。