海綿寶寶撒
2022-09-02 21:23:25
嗨,我正在使用jquery回調函數來檢查復選框的狀態。我正在使用以下代碼,但我不明白為什么我們需要在回調中再次使用單擊事件。包含代碼后,它工作正常。誰能告訴我這個機制與插圖真的有幫助。提前致謝。 function notify() { if (jQuery('input[type=checkbox]').is(':checked')) { ... } else { .... } jQuery("#dummy").on("click", notify); // Why i need this to do it again //Is it will work like recursive function } jQuery(document).ready(function(){ jQuery("#dummy").on("click",notify); //This is my callback });
2 回答

楊魅力
TA貢獻1811條經驗 獲得超6個贊
生產線
jQuery("#dummy").on("click", notify);
真的不應該在回調中。順便說一句,它不會單擊按鈕,而是注冊另一個“單擊”偵聽器。而且每次單擊時,不僅只有一個,而且還有一個額外的偵聽器。
第一次單擊,調用一個偵聽器并調用“notify”。這增加了第二個。
第二次單擊時,調用兩個 listner,兩個都添加另一個,總共最多 4 個。接下來單擊它是 8,然后是 16,...點擊幾下后,您的系統應該會變慢。
因此,在 notify 方法中刪除該方法。

慕尼黑的夜晚無繁華
TA貢獻1864條經驗 獲得超6個贊
為什么我們需要在回調內部使用jQuery點擊事件
當且僅當您刪除的位替換為一些新的HTML時,您才會(可以)執行此操作。...
#dummy
然后,原始的單擊事件將被刪除(因為它引用的元素將不再存在) - 因此您需要為新的HTML添加事件處理程序。
使用事件委派可以更好地處理此方案。
另一種方法是,如果您更改為確保一次只單擊一次(例如,如果單擊事件處理程序執行一些ajax,并且您不希望用戶在保存現有數據時再次單擊它(例如))。.on
.one
然后,在處理完成后重新添加 .one 事件。
鑒于提供的(有限的)代碼,這似乎不是您的問題中的場景(因為沒有ajax可以“等待”)。如果按鈕上有視覺更新(例如灰顯),也會更好。
添加回答
舉報
0/150
提交
取消