2011-03-07 71 views
7

我正在創建一個模態JQuery UI對話框並將結果存儲在$ dialog變量中。的按鈕的變化取決於在其上選擇操作,所以使用一個函數調用這樣設置按鈕:Jquery UI對話框按鈕文本不起作用

$dialog.dialog("option", "buttons", [ 
    { 
     text: "Ok", 
     click: function() { close_project(); } 
    }, 
    { 
     text: "Cancel", 
     click: function() { ($this).dialog("close"); } 
    } 
]); 

這顯示與在其中的文本「0」和「1」而不是「好」的兩個按鈕和'取消'。此外,點擊功能似乎沒有工作。

我已經過了很多次,語法看起來正確。我究竟做錯了什麼?

+1

你的語法確實出現了是正確的。是否有其他代碼修改對話框? – 2011-03-07 22:18:08

回答

6

jQuery用戶界面幫助這說你正在使用的方法是模態已經初始化 - http://jqueryui.com/demos/dialog/#option-buttons這是這種情況?

如果沒有,試試這個,然後嘗試它是如何爲您的解決方案不同,或者適合:

$dialog.dialog({ buttons: [ 
    { 
     text: "Ok", 
     click: function() { close_project(); } 
    }, 
    { 
     text: "Cancel", 
     click: function() { $(this).dialog("close"); } 
    } 
]}); 
3

您可以嘗試的語法是這樣的:

$dialog.dialog("option", "buttons", { 
     "Ok": function() { close_project(); }, 
     "Cancel": function() { $(this).dialog("close"); } 
    } 
); 
0

「文本」選項是一個布爾標誌,用於指定是否顯示標籤中的文本。也許你應該嘗試改變按鈕的.html()

$("#Button1").html("Ok"); 
1

我有相同的「0 1」按鈕標籤問題。我「需要」按鈕的數組語法,而不是對象語法,因爲我想設置按鈕ID(我的代碼看起來像rdamborsky的ID設置,但仍然無法使用)。我看了看這個問題:

jQuery UI Dialog Button Icons

而在這個問題修改的嘗試代碼。對於你的具體例子:

$dialog.dialog({ buttons: { 
     "Ok": function() { close_project(); }, 
     "Cancel": function() { $(this).dialog("close"); } 
    }, 
    open: function() { 
     $('.ui-dialog-buttonpane').find('button:contains("Cancel")').attr("id", "cancel_button"); 
     $('.ui-dialog-buttonpane').find('button:contains("Ok")').attr("id", "ok_button"); 
}}); 

順便說一句,當我認爲你的意思是$(this)在你的代碼中時,我注意到($ this)。這可能會造成一次點擊。其他點擊可能會有問題(但只有在某種程度上在ajax請求中):如果您在IE 7或8中,稍作修改以規避IE(ajax)範圍問題。在$ dialog.dialog代碼之前,執行「window.close_project = close_project;」然後調用「window.close_project();」在點擊功能中。如果您不需要更改id或類或其他任何內容,請刪除「open」,然後使用按鈕的對象語法。或者,只需使用amurra的答案。

1

這似乎是制定者不工作。我所做的,而不是與一次設置所有選項的對話框完全初始化:

<script type="text/javascript"> 
    $("#DiscardDialog").dialog(
    { 
     autoOpen: false, 
     title: "Discard", 
     buttons: 
     { 
      "Yes": function() 
      { 
       window.location = "@Url.Action("Discard", new { ID = this.Model.ID })"; 
      }, 
      "No": function() 
      { 
       $(this).dialog("close"); 
      } 
     } 
    }); 
</script> 
+1

+1 for autoOpen:false。沒有看到這是其他的例子。 – ter24 2014-03-13 16:17:15

1

這工作太:

buttons: { 
     'Do some action': function() { 
      //a button called 'Do some action' is created 
     }, 
     Close: function() { 
      //a button called 'Close' is created 
      $(this).dialog('close'); 
     } 
    }, 
    open: function() { 
     //event fires when dialog opens 
    }, 
    close: function() { 
     //event fires when dialog closes 
    } 
0

這爲我工作

$("#dialog-form").dialog 
(
{ 
    autoOpen: false, 
     height: 300, 
    width: 350, 
    resizable: false, 
    autoOpen: false, 
    modal: true, 
    buttons: { 
     'Guardar' : function() 
     { 
      $("#dialog-form").dialog("close"); 
      $(this).html("Guardar"); 
     }, 
     Cancel: function() 
     { 
      $(this).html("Cancelar"); 
      $("#dialog-form").dialog("close"); 
     } 
    } 
});