2012-04-23 4 views
0

Я мало знаю о написании хорошего javascript, поэтому, возможно, я думаю об этом не так, но вот ситуация.Как я могу установить крючок в диалоговом окне jQuery ui?

У меня есть страница, которая содержит различные плагины, каждая с кнопкой редактирования.

Так, например, HTML-плагин, щебетать плагин и т.д.

После того, как вы нажмете на кнопку редактирования диалоговое окно 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 с плагином обновления.

Есть ли способ, которым я могу указать кнопку сохранения, что делать до того, как он запустит свой обычный код при нажатии кнопки «Сохранить»?

Если кому-то нужно больше объяснений, пожалуйста, дайте мне знать.

Любая помощь в отношении того, как я могла бы написать это, была бы очень признательна.

Edit:

Кажется, у меня возникают проблемы объяснить мою проблему так что надеюсь, это редактирование поможет сделать вещи более ясными.

Я хочу выполнить какой-то код, который будет необязательно определен в содержимом диалогового окна при его открытии. Этот код, если он определен, должен быть выполнен после нажатия кнопки сохранения, но до того, как будет выполнена фактическая функция щелчка. Это возможно?

+0

Вы хотите что-то сделать до того, как код будет выполнен? Или вы хотите, чтобы приложить к этому исполнению? –

+0

@EduardoCrimi Спасибо за ваш комментарий. Я хочу выполнить некоторый код, который будет опционально определен в содержимом диалогового окна, когда он был открыт. Этот код, если он определен, должен быть выполнен после нажатия кнопки сохранения, но до того, как будет выполнена фактическая функция щелчка. –

ответ

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

Благодарим вас за ответ. Кажется, это похоже на то, что это будет лучшим решением для меня в это время. –

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

Спасибо за ваш ответ Кайл, но я боюсь, что я не очень хорошо объясняю свою проблему в этом случае. Я хочу выполнить некоторый код, который будет необязательно определен в содержимом диалогового окна, когда он будет открыт. Этот код, если он определен, должен быть выполнен после нажатия кнопки сохранения, но до того, как будет выполнена фактическая функция щелчка. Это возможно? –

+0

Итак ... запустите код «live», который вводит пользователь ... похоже на что-то вроде JSFiddle? –

+0

Почему это не работает? Это похоже на то, что описывает Кайл. – Rick