淺談jQuery綁定事件會(huì)疊加的解決方法和心得總結(jié)
關(guān)于jQuery的學(xué)習(xí)中我忽略了一個(gè)取消綁定事件.unbind()的使用,也不知道綁定事件會(huì)累加的情況,結(jié)果因?yàn)檫@個(gè)原因,讓我在項(xiàng)目上栽了坑。只能說自己還太年輕,需要學(xué)習(xí)掌握的知識(shí)還有很多。
我遇到的問題
我在項(xiàng)目中遇到的狀況,一個(gè)評(píng)價(jià)頁面,簡(jiǎn)單的來說就是左右兩個(gè)表格,ajax分別動(dòng)態(tài)加載學(xué)生姓名學(xué)號(hào)信息和不同科目對(duì)學(xué)生評(píng)價(jià)內(nèi)容兩部分,兩邊表格我都每行寫了checkbox并對(duì)table tbody tr綁定click事件執(zhí)行行選功能,起初我寫的是靜態(tài)頁面html,行選功能完全沒有問題,后來換成jsp頁面,ajax動(dòng)態(tài)加載數(shù)據(jù)進(jìn)來后,問題就來了,由于ajax異步請(qǐng)求,兩邊表格發(fā)送請(qǐng)求加載數(shù)據(jù)有先后,之前靜態(tài)頁面測(cè)試好的行選功能就出了問題,每次刷新頁面,只有后加載的部分才可以行選,之前加載的部分行選失效。自己控制臺(tái)打印點(diǎn)擊的狀態(tài)console.log(chkBoxStatus);測(cè)試發(fā)現(xiàn)前加載的部分總是打印兩次false true,而后加載的部分只打印一次false或是true。
我之前的行選代碼段:
//行選功能
$("table tbody tr").click(function(event) {
//遍歷tr下的checkbox元素
var $check = $(this).find("input[type=checkbox]");
//判斷非點(diǎn)擊checkbox本身
if($check.length > 0 && event.target != $check[0]) {
var chkBoxStatus = $check.is("input:checked");
console.log(chkBoxStatus);
$check.prop("checked", !chkBoxStatus);
}
});
起初我認(rèn)為我肯定是jQuery功能代碼不對(duì),于是自己檢查了html里id,class,發(fā)現(xiàn)并沒有出錯(cuò),于是我便一直在想為何控制臺(tái)會(huì)意外打印兩次,后面室友提示我說,試試在執(zhí)行功能之前清除事件綁定,于是我便照做了用jquery 的.unbind("click"),清除所有table上的click事件。結(jié)果!結(jié)果竟然成功了?。?!兩邊的表格數(shù)據(jù)都可以正常進(jìn)行行選功能,雖然是完成了預(yù)期功能,但是我當(dāng)時(shí)不知道為什么要這樣去做清除事件。后面我突然想到原來是執(zhí)行了兩次click事件的結(jié)果,每次先加載的數(shù)據(jù),加載完畢后就被綁定click事件一次,后加載的數(shù)據(jù)加載完畢后,之前先加載的數(shù)據(jù)再次被綁定一次click事件,所以也就是為什么先加載的數(shù)據(jù)行選失效,打印兩次false true , 而后加載的數(shù)據(jù)行選正常,打印一次。
下面是修改后的代碼:
//行選功能
$("table tbody tr").unbind("click");//清除table的所有click事件
$("table tbody tr").click(function(event) {
//遍歷tr下的checkbox元素
var $check = $(this).find("input[type=checkbox]");
//判斷非點(diǎn)擊checkbox本身
if($check.length > 0 && event.target != $check[0]) {
var chkBoxStatus = $check.is("input:checked");
console.log(chkBoxStatus);
$check.prop("checked", !chkBoxStatus);
}
});
雖然問題很小,但是也是學(xué)習(xí),總之自己還是需要不斷努力,完善自己。博文只是對(duì)自己的總結(jié)
以上就是小編為大家?guī)淼臏\談jQuery綁定事件會(huì)疊加的解決方法和心得總結(jié)全部?jī)?nèi)容了,希望大家多多支持腳本之家~
- jquery綁定事件不生效的解決方法
- jQuery中的bind綁定事件與文本框改變事件的臨時(shí)解決方法
- jQuery防止重復(fù)綁定事件的解決方法
- jQuery中on綁定事件后引發(fā)的事件冒泡問題如何解決
- Jquery on方法綁定事件后執(zhí)行多次的解決方法
- 解決jquery appaend元素中id綁定事件失效的問題
- jQuery給動(dòng)態(tài)添加的元素綁定事件的方法
- JQuery中綁定事件(bind())和移除事件(unbind())
- JQuery 綁定事件時(shí)傳遞參數(shù)的實(shí)現(xiàn)方法
- jquery新的綁定事件機(jī)制on方法的使用方法
- jQuery動(dòng)態(tài)添加元素?zé)o法觸發(fā)綁定事件的解決方法分析
相關(guān)文章
jquery 可拖拽的窗體控件實(shí)現(xiàn)代碼
這個(gè)是一個(gè)讓DOM元素可以拖拽的控件,代碼很簡(jiǎn)單,我也是新手,不知道有沒有BUG,自己測(cè)試還行,希望大家發(fā)現(xiàn)BUG,踴躍提出,謝謝。這個(gè)是基于JQUERY開發(fā)的2010-03-03
jQuery實(shí)現(xiàn)獲取綁定自定義事件元素的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)獲取綁定自定義事件元素的方法,涉及jQuery方法重載、事件綁定及元素操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-12-12
原生JS實(shí)現(xiàn)在線問卷調(diào)查投票特效
本文主要分享了原生JS實(shí)現(xiàn)在線問卷調(diào)查投票特效的實(shí)例代碼??芍苯訌?fù)制保存HTML運(yùn)行查看效果。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01
基于Jquery插件Uploadify實(shí)現(xiàn)實(shí)時(shí)顯示進(jìn)度條上傳圖片
這篇文章主要介紹了基于Jquery插件Uploadify實(shí)現(xiàn)實(shí)時(shí)顯示進(jìn)度條上傳圖片的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
用jquery實(shí)現(xiàn)學(xué)校的校歷(asp.net+jquery ui 1.72)
學(xué)校日歷有以下幾個(gè)特點(diǎn):1顯示本周是本學(xué)期的第幾周;2顯示今日事件;3特殊顯示有事件的日期,點(diǎn)擊該日期顯示本日事件。2010-01-01

