2016-04-25 51 views
0

我的問題有兩面。Javascript onclick getvalue is undefined

我試圖發送通過循環產生像這樣一個簡單的GET值:

for(var x=0; x<del.length; x++) { 
     del[x].onclick = function() { 
     WORK(x); 
     } 
    } 

這是我感到沮喪的功函數

function WORK (x) { 
     var y = ids[x]; 
     var url = "Delete.php?val=" + y; 
     window.location = url; 
    } 

我知道我必須通過值的功能...但如果我設置它的頁面執行加載功能,並不等待我的點擊,因爲它是現在它總是會傳遞一個未定義的值...發生了什麼這裏?

+1

什麼是'del'?它是DOM節點的集合嗎?看到一些HTML和其他一些代碼會很有用。最重要的是,由於範圍問題,您總是會將'x'作爲所有點擊的最後一個值。 – Andy

+0

正如@Andy指出的那樣,您總是會得到x作爲最後一個值,您需要在匿名函數中使用clousre,在點擊事件中正確綁定您的數據,這個主題上有很多文章 – user3045179

+0

以及它是所有類名delete的td,基本上我想讓通過GET發送帶有id的值的刪除按鈕,我知道ajax可以做得更好,但是這看起來更有趣:o。 –

回答

0

for循環中的變量提升+非範圍變量。 使用.forEach

Array.prototype.slice.call(del).forEach(function(elem, index) { 
    elem.onclick = ... 
}); 

或者,如果你不能,使用立即調用的匿名函數:

for (var x = 0; x < del.length; x++) { 
    (function() { 
     var elem = del[x]; 
     ... 
    })(); 
} 

當您通過迭代循環,只有永遠一個x變量。它沒有作用於for循環,並且每次迭代都會更改(x++)。觸發點擊時,會調用事件處理程序,該處理程序依次調用WORK,其值爲x作爲參數,該參數在運行時已經爲del.length

+0

'del'不會是一個數組... – Andy

+0

感謝你們兩位的幫助,我終於找到了工作:3。 –