2012-04-23 27 views
0

我對編寫好的javascript不太瞭解,所以也許我以錯誤的方式思考這個問題,但這裏是情況。如何在jQuery ui對話框按鈕中單擊提供鉤子?

我有一個頁面,其中包含各種插件,每個插件都帶有編輯按鈕。

因此,有例如一個HTML插件,Twitter的插件等

一旦你點擊編輯按鈕通過一個共同的功能,所有的編輯按鈕調用顯示一個jQuery UI對話框。 對話框的內容用特定插件的更新表單填充。

該公共功能創建的對話框還自動提供「保存」和「取消」按鈕。

由於這兩個「保存」和「取消」按鈕都是通過對話框創建的,因此它們都被指定爲「單擊」選項的閉包。

如果可能,我想要做的是提供某種鉤子函數,當點擊「保存」按鈕時可以運行這個鉤子函數,它可以由每個插件的更新形式中的javascript定義。

我想我已經解釋過夠了,所以這裏是一些示例代碼:

這會告訴每一個編輯按鈕,創建一個對話框,並與相應的內容填充它。

// This function is called by each edit button 
// on a click event which passes the required ids 

function update_form_dialog(plugin_id) { 
    $.post(
     '/get_plugin_update_form', 
     { 
      'plugin_id': plugin_id 
     }, 
     function(response) { 
      var dialog = $('<div class="update_form"></div>').appendTo('body'); 

      dialog.dialog({ 
       open: function() { 
        dialog.html(response); 
       }, 
       show: 'fade', 
       modal: true, 
       title: 'Update plugin', 
       width: 'auto', 
       height: 'auto', 
       buttons: [ 
        { 
         text: 'Save', 
         click: function() { 
          // Call a hook defined in the plugin update 
          // form then send update data 
         } 
        }, 
        { 
         text: 'Cancel', 
         click: function() { 
          // Close the dialog here 
         } 
        } 
       ] 
      }); 
     } 
    ); 
} 

正如你可以在上面的代碼我有什麼是非常簡單的看,但我不知道我怎麼能鉤添加到「保存」按鈕的點擊功能的啓動。

每個插件的更新表單都存儲在response變量中,這就是寫入插件更新表單的javascript的地方。

有沒有一種方法可以告訴保存按鈕在點擊「保存」按鈕之前運行正常代碼之前要做什麼?

如果有人需要更多的解釋,請讓我知道。

任何關於如何寫這個的幫助將不勝感激。

編輯:

看來我無法解釋我的問題,所以希望這個編輯將有助於使事情更清晰。

我想要的是執行一些代碼,它將在打開對話框的內容時被選擇性地定義。如果定義了這個代碼,應該在點擊保存按鈕之後但在執行實際點擊功能之前執行。這可能嗎?

+0

你想在代碼執行之前做些什麼嗎?或者你想要一種方法來附加執行? – 2012-04-23 17:41:21

+0

@EduardoCrimi謝謝您的評論。我想要執行一些代碼,在打開對話框的內容時可以選擇定義它們。如果定義了這個代碼,應該在點擊保存按鈕之後但在執行實際點擊功能之前執行。 – 2012-04-23 17:43:33

回答

1

您可以使用插件訂閱和連接到一些事件,如:

http://weblog.bocoup.com/publishsubscribe-with-jquery-custom-events/ http://archive.plugins.jquery.com/project/jQuerySubscribe http://www.novasoftware.com/download/jquery/publish-subscribe.aspx

這樣,在救你可以發佈保存已經完成,所有的用戶代碼將被執行。

與第三鏈接,你可以做類似如下:

$(document).ready(function(){ $('.save').subscribe('save',function(){//dosomething;}}) 

上節省代碼之後,你可以這樣做:

$.publish('save'); 

,代碼會被執行 希望它有助於。

+0

謝謝你的回答。看起來這看起來對我來說目前是最好的解決方案。 – 2012-04-23 17:58:01

1

你很近!

  buttons: { 

        'Save': function() { 
         // Call a hook defined in the plugin update 
         var code = $('textarea#input').val(); 
         eval(code); 
         // form then send update data 
         $('form').submit(); 
         // $.ajax({.... 
        }, 
        'Cancel': function() { 
         // Close the dialog here 
        } 
      } 
+0

謝謝你的回答凱爾,但是我擔心在這種情況下我不擅長解釋我的問題。我想要的是執行一些代碼,它可以在打開對話框的內容時有選擇地定義。如果定義了這個代碼,應該在點擊保存按鈕之後但在執行實際點擊功能之前執行。這可能嗎? – 2012-04-23 17:44:51

+0

因此......運行用戶輸入的代碼'live'...類似於JSFiddle之類的東西? – 2012-04-23 17:46:28

+0

爲什麼這不能工作?這看起來像凱爾所描述的。 – Rick 2012-04-23 17:52:53

相關問題