Jquery?on("click")方法綁定事件后執(zhí)行多次的解決方法
一、發(fā)現(xiàn)問題
在開發(fā)過程中,無意發(fā)現(xiàn)頁面彈窗按鈕的點(diǎn)擊事件使用on
函數(shù)綁定click
時(shí),產(chǎn)生多次請求,從而可能會造成不必要的資源消耗。
舉例:
頁面按鈕:
代碼片段:
let drBox = $('#choiceDetailPopup'), // 提交 console.log("submitTask start"); drBox.on('click','#submitTask',function(){ console.log("submitTask click"); // 處理自己的業(yè)務(wù)邏輯 …… })
瀏覽器console:
二、解決問題
使用js動態(tài)加載內(nèi)容,同時(shí)需要對加入的內(nèi)容綁定點(diǎn)擊事件的,on(‘click’,function(){})
對同一個(gè)元素多次綁定同一個(gè)事件的時(shí)候,這個(gè)事件就會執(zhí)行多次。
在每次綁定事件之前,對該事件解綁,可以使用的辦法:
.off(“click”); //解除綁定點(diǎn)擊事件 .unbind("click");//移除綁定點(diǎn)擊事件 .unbind(); //移除所有綁定事件
我采用第一種辦法,直接在 on
綁定 click
前,先釋放,再綁定。
原代碼片段修改如下:
let drBox = $('#choiceDetailPopup'), // 提交 console.log("submitTask start"); drBox.off('click').on('click','#submitTask',function(){ console.log("submitTask click"); // 處理自己的業(yè)務(wù)邏輯 …… })
修改后,瀏覽器console如下:
事件觸發(fā)正常了。
實(shí)際的場景可能會復(fù)雜得多,因此在使用on()方法給元素綁定事件的時(shí)候要格外注意多次重復(fù)綁定的問題。
總結(jié)
相關(guān)文章
在jQuery中使用$而避免跟其它庫產(chǎn)生沖突的方法
這篇文章主要介紹了在jQuery中使用$而避免跟其它庫產(chǎn)生沖突的方法,總共羅列了三種,需要的朋友可以參考下2015-08-08jquery attr 設(shè)定src中含有&(宏)符號問題的解決方法
今天在用 jquery 的attr 方法設(shè)定 iframe的src屬性的時(shí)候遇到了一個(gè)奇怪的為題,現(xiàn)在把問題及解決方面寫出來,讓遇到同樣問題的人不要在走彎路。2011-07-07jQuery 移動端拖拽(模塊化開發(fā),觸摸事件,webpack)
這篇文章主要介紹了jQuery 移動端拖拽(模塊化開發(fā),觸摸事件,webpack)的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10jquery設(shè)置元素的readonly和disabled的寫法
Jquery的api中提供了對元素應(yīng)用disabled和readonly屬性的方法,在這里記錄下,感興趣的朋友可以練練手了2013-09-09淺析JQuery UI Dialog的樣式設(shè)置問題
本篇文章主要是對JQuery中UI Dialog的樣式設(shè)置問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12jQuery/$ is not defined報(bào)錯(cuò)的幾種解決方法
jQuery最常見的錯(cuò)誤之一是$ is not defined錯(cuò)誤,本文主要介紹了jQuery/$ is not defined報(bào)錯(cuò)的幾種解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02jQuery實(shí)現(xiàn)的導(dǎo)航下拉菜單效果
這篇文章主要介紹了jQuery實(shí)現(xiàn)的導(dǎo)航下拉菜單效果,涉及jQuery響應(yīng)鼠標(biāo)事件動態(tài)操作頁面元素的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07