不要仔細看代碼,我會嘗試編寫僞代碼,只是爲了理解這個想法和我的問題。所以,想象我有這樣的功能(注意var name = $('#name').val();
)Javascript事件處理程序
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功能我再次調用初始化,以及相同的元素#動作+鏈接獲得超過1個事件處理程序,當我點擊其中第二個被執行多次,第三等時間。我通過刪除舊的事件處理程序來處理它。 jquery停止傳播方法,據我所知,也有幫助。
我不明白的是爲什麼當我得到輸入值的變量'名稱',第一次它得到它漂亮,但是當我點擊第二,第三等時間我總是得到價值我插入第一次而不是我插入的新價值。如果我不在createFolder函數中調用initialize,並且不分配多個事件處理程序,那麼一切正常。我認爲事件處理程序有問題......但我不能確定。
非常感謝您的回答。這是有道理的,我不知道它每創造一個新形式。 – Viktor 2012-07-17 13:37:44