0

コードを正確に見ないでください。アイデアと私の問題を理解するためだけに、擬似コードを作成しようとします。だから私がそのような機能を持っていると想像してください(注意してくださいvar name = $('#name').val();

  function createFolder(button1, button2, element){

    var btns = {};
    btns[button1] = function(){
       var name = $('#name').val();
      .....
      $(this).dialog("close");
    };
    btns[button2] = function(){
      // Do nothing
      $(this).dialog("close");
    };
    $("<form><input type='text' id='name' name='name'/></form>").dialog({
      autoOpen: true,
      title: 'Condition',
      modal:true,
      buttons:btns
    });
  }

基本的には、フォームと2つのボタンとして開くダイアログです。

さて、DOMがロードされると、プラグインがアクティブになり、いくつかの魔法を実行し、明白なテーブル <tr> タグを実行し、すべての<a>タグがそれに接続されたイベントハンドラーを取得します。このようなもの:

function initialize(){
  ...Some magic here...
  .....

  node.find('#action-links').children().on('click',function(e){
     createFolder( node,'Create Folder', 'Cancle' );

  }
  .....
}

そのcreateFolder関数内で、もう一度initializeを呼び出し、同じ要素#action + linkが複数のイベントハンドラーを取得します。このイベントハンドラーは、2回目、3回目などをクリックすると複数回実行されます。古いイベントハンドラーを削除して対処します。そして、私が試した限り、jqueryは伝播メソッドを停止します。

私が理解していないのは、変数「名前」で入力値を取得すると、最初は美しく取得されますが、2回目、3回目などをクリックすると、常に新しい値ではなく最初に挿入された値を取得する理由です。挿入されました。createFolder関数内でinitializeを呼び出さず、複数のイベントハンドラーを割り当てない場合は、すべて正常に機能します。イベントハンドラーに問題があると思いますが、もう一度わかりません。

4

1 に答える 1

0

同じIDで新しいフォーム要素を作成し続けます。IDは一意である必要があるため、作成した最初の要素のみを参照しているようです。フォームを何度も作成するのではなく、createFolder関数の最後の部分は次のようになります。

if (!$('#form-name').length) {
    $('body').append($("<form id='form-name'><input type='text' id='name' name='name'/></form>"))
}
$("#form-name").dialog({
    // etc
});
于 2012-07-17T13:21:46.373 に答える