コードを正確に見ないでください。アイデアと私の問題を理解するためだけに、擬似コードを作成しようとします。だから私がそのような機能を持っていると想像してください(注意してください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を呼び出さず、複数のイベントハンドラーを割り当てない場合は、すべて正常に機能します。イベントハンドラーに問題があると思いますが、もう一度わかりません。