2010-08-17 77 views
2

我有一個問題,我正在重用對話框,所以我不想重複代碼。我遇到的問題是當我點擊一個「添加新的」按鈕,我有按鈕「保存」和「取消」。對話框中的保存按鈕可以保存信息。如果我點擊「編輯現有」按鈕來編輯我的信息,我希望「保存」按鈕變成「編輯」按鈕。這可能嗎?更改jquery對話框按鈕

+1

很難說我會考慮插入正在編輯的記錄的主鍵 - 在編輯模式 - 然後讓服務器代碼處理該字段的缺失(或存在) – Wayne 2010-08-17 02:22:59

回答

1

我認爲你要做的是,在運行時,根據用戶操作更改按鈕的文本。這個涉及Richard Worth的discussion可能會有所幫助,而這正是我爲了完成你所要做的事情而必須使用的。

基本上,通過將按鈕數組定義爲對象文本(在對話框定義中內聯),您所做的嘗試是不可能的。你應該做的是在對話框初始化之外定義你的按鈕數組;你的數組索引可以是你的標籤文本(就像你在消息討論的例子中看到的那樣)。然後,在初始化數組時,只需將buttons屬性分配給按鈕數組。

在僞代碼,你會做到這一點:

function createDialog(mode) { //mode=new for dayClick; edit for eventClick 
    var myButtons = {}; //initialize the object to hold my buttons 
    if (mode === "new") { 
    myButtons["Save"] = function() {...} //the function that does the save 
    } else { 
    myButtons["Edit"] = function() {...} //the function that edits 
    } 
    myButtons["Cancel"] = function() {...} //common cancel function for either new or edit mode 

    //other logic 

    $("#dialogAddEdit").dialog({ 
    ... 
    buttons: myButtons, //assign the buttons property to your myButtons array object 
    ... 
    }); 
} 

希望這有助於!

+0

@ D Hoerster - 在Firebug中, – hersh 2010-08-17 12:34:08

+0

你在哪裏定義模式?在我的例子中,它只是僞代碼 - 我假設你知道用戶正在採取什麼操作(不管它是一個cre吃或編輯動作)。基於此,您可以轉到代碼的相應部分來添加按鈕。對不起,如果不明確。您如何知道用戶是否嘗試創建新內容或編輯現有項目? – 2010-08-17 12:48:33

+0

我正在使用fullcalendar彈出模式...所以在fullcalendar的dayClick這是一個回調,這將添加一個事件... on fullcalendar的eventClick,也是一個回調,這將編輯和事件。 – hersh 2010-08-17 13:04:01

0

還有另一個簡單的解決方案做到這一點:

只需創建對話框通常,給兩個(或更多)按鈕的「關鍵詞」(這裏「open_key」和「cancel_key」),然後,剛剛初始化後,使用一點jQuery技巧設置這些HTML元素的文本:contains()

下面

示例代碼(pp_loca是我的函數來獲取一個本地化的字符串,但pp_loca不能在「按鈕{...}」選項一起使用...

$("#dialog_open_from_server").dialog({ 
    resizable: false, 
    height: "auto", 
    width: 600, 
    modal: true, 
    buttons: { 
     "open_key": function() { 
      $(this).dialog("close"); 
     }, 
     "cancel_key": function() { 
      $(this).dialog("close"); 
     } 
    } 
}); 
$('.ui-button:contains("open_key")').html(pp_loca('ITF_26')); 
$('.ui-button:contains("cancel_key")').html(pp_loca('ITF_27'));