我真的很困惑,甚至不知道如何尋找答案。我收到了一個javascript函數的多個調用。我對我沒有意義。jquery live自動增加keyup事件
以下是代碼的作用。
$('expenses_txt').live(\'keyup\', function() {
$(this).typeWatch({ highlight: true, wait: 500, captureLength: 0, callback: calculate_expenses });
});
的「Calculate_expenses」是使用jQuery的AJAX調用PHP頁面,返回被顯示在期間數據的JavaScript函數。
我使用螢火蟲來幫助我調試和Calculate_expenses功能,我把一個「console.log」調試時,這個函數被調用。
以下是發生了什麼事情。在DOM發生這種情況時,我只有一個輸入框,當我只按下一個按鍵時,控制檯中的輸出會輸出一個類似於它的調試信息,當我再次在同一個輸入框中按一個按鍵時,控制檯加倍(即Calculate_expenses函數被調用了兩次,但應該只調用一次),當我再次按下某個鍵時(總共進行3次按鍵操作),控制檯中的輸出將輸出3次調用Calculate_expenses函數現在.....等等。我真的不知道這裏發生了什麼事。代碼在我看來,它只會調用Calculate_expenses函數1次,但是當使用螢火蟲時,實際上它會在我不想要的時候被反覆調用。
任何想法?是我使用.live()的方式如果我只是使用「keyup」事件它工作正常,問題是我需要使用typeWatch插件來延遲ajax調用,直到鍵入完成並且鍵盤事件觸發不久。我使用live()的原因是因爲我動態地向dom添加元素,並且這是我唯一可以弄清楚如何使用typeWatch和動態添加元素到dom中需要總結的唯一方法...
你的想法是讚賞。謝謝。
你用什麼方法動態地向dom添加元素? – user113716 2010-02-03 02:13:15
帕特里克,我早先在另一個問題中提出了你的建議,我不得不使用.clone(true),它解決了keyup沒有被複制到新創建的輸入框的問題。當我嘗試使用typeWatch插件時,問題就出現了......它只能在第一個輸入框中工作,那些動態添加的將不會觸發。我不喜歡之前用.clone(true)解決的問題,我唯一的缺點是「keyup」是標準的,而「typeWatch」不是。任何其他想法? – Ronedog 2010-02-03 03:33:46