2011-06-15 221 views
3

我目前正在定義一個變量no。這樣的jQuery對話框的按鈕JQuery對話框:如何找到按鈕點擊事件中的點擊按鈕

var buttonNames = buttonNamesString.split("|"); 
    var buttonsOpts = {}; 
    for (i = 0; i < buttonNames.length; i++) { 
     buttonsOpts[buttonNames[i]] = function() { $(this).dialog("close");__doPostBack(postbackControlID, buttonNames[i]);} 
    } 

並像這樣初始化對話框。 (注意線按鈕:buttonsOpts那我如何傳遞變量沒有按鈕的。)

var parentElement = popupControl.parent();    
      popupControl.dialog({ 
           autoOpen: false, 
           modal: true, 
           buttons: buttonsOpts,         
           hide: "explode", 
           open:function(type, data){ 
            $(this).parent().appendTo(parentElement); 
            popupControl.css({visibility: "visible"});           
           } 
           }); 

當在對話框中的按鈕被點擊buttonNames問題是[I]返回任何在線路,因爲我已遞增到最大值。

函數(){$(本).dialog( 「關閉」); __ doPostBack(postbackControlID,buttonNames [I]);}

我們可以訪問哪些從事件代碼中觸發一個事件的對象Javascript就像我們在.Net事件中使用sender對象一樣。這將解決這個問題。

我該如何克服這個問題?提前致謝。

回答

1

問題是你在循環迭代變量上使用閉包。這應該通過改變索引的範圍來解決它。

for (i = 0; i < buttonNames.length; i++) { 
     var index = i; 
     buttonsOpts[buttonNames[index]] = function() { $(this).dialog("close");__doPostBack(postbackControlID, buttonNames[index]);} 
    } 

較長的回答你的問題是,你產生的所有引用相同數目的變量,i功能。因此,在循環結束時,所有函數都設置爲buttonNames.length。由於在buttonNames [buttonNames.length]中定義的數組中沒有按鈕,因此您會得到undefined

注:不需要在buttonOpts[buttonNames[index]]臨時變量,它只是有一致性