2012-04-23 10 views
0

私は良いjavascriptを書いていることについてよく知らないので、これについて間違った方法で考えているかもしれませんが、ここに状況があります。jQuery UIのボタンをクリックすると、どのようにフックを提供できますか?

私は様々なプラグインを含むページを持っており、それぞれに編集ボタンがあります。

だから、例えばTwitterの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が書き込まれる場所です。

「保存」ボタンをクリックしたときに通常のコードを実行する前に、保存ボタンに何をするかを伝える方法はありますか?

さらに詳しい説明が必要な場合は、教えてください。

どのように私がこれを書くことができたかについての助けは非常に高く評価されるでしょう。

編集:

私がうまくいけば、この編集は、物事をより明確にするのに役立ちます私の問題を説明するトラブルを抱えているようです。

私が望むのは、ダイアログボックスを開いたときにダイアログボックスの内容にオプションで定義されるコードを実行することです。このコードが定義されている場合は、保存ボタンがクリックされた後、実際のクリック機能が実行される前に実行する必要があります。これは可能ですか?

あなたが加入するなど、いくつかのイベントに取り付けるためのプラグインを使用することができます
+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

実行されます。あなたは、次のような何かを行うことができ、第3リンクと

$(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

関連する問題