淺談jQuery綁定事件會疊加的解決方法和心得總結(jié)
關(guān)于jQuery的學習中我忽略了一個取消綁定事件.unbind()的使用,也不知道綁定事件會累加的情況,結(jié)果因為這個原因,讓我在項目上栽了坑。只能說自己還太年輕,需要學習掌握的知識還有很多。
我遇到的問題
我在項目中遇到的狀況,一個評價頁面,簡單的來說就是左右兩個表格,ajax分別動態(tài)加載學生姓名學號信息和不同科目對學生評價內(nèi)容兩部分,兩邊表格我都每行寫了checkbox并對table tbody tr綁定click事件執(zhí)行行選功能,起初我寫的是靜態(tài)頁面html,行選功能完全沒有問題,后來換成jsp頁面,ajax動態(tài)加載數(shù)據(jù)進來后,問題就來了,由于ajax異步請求,兩邊表格發(fā)送請求加載數(shù)據(jù)有先后,之前靜態(tài)頁面測試好的行選功能就出了問題,每次刷新頁面,只有后加載的部分才可以行選,之前加載的部分行選失效。自己控制臺打印點擊的狀態(tài)console.log(chkBoxStatus);測試發(fā)現(xiàn)前加載的部分總是打印兩次false true,而后加載的部分只打印一次false或是true。
我之前的行選代碼段:
//行選功能 $("table tbody tr").click(function(event) { //遍歷tr下的checkbox元素 var $check = $(this).find("input[type=checkbox]"); //判斷非點擊checkbox本身 if($check.length > 0 && event.target != $check[0]) { var chkBoxStatus = $check.is("input:checked"); console.log(chkBoxStatus); $check.prop("checked", !chkBoxStatus); } });
起初我認為我肯定是jQuery功能代碼不對,于是自己檢查了html里id,class,發(fā)現(xiàn)并沒有出錯,于是我便一直在想為何控制臺會意外打印兩次,后面室友提示我說,試試在執(zhí)行功能之前清除事件綁定,于是我便照做了用jquery 的.unbind("click"),清除所有table上的click事件。結(jié)果!結(jié)果竟然成功了?。?!兩邊的表格數(shù)據(jù)都可以正常進行行選功能,雖然是完成了預期功能,但是我當時不知道為什么要這樣去做清除事件。后面我突然想到原來是執(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]"); //判斷非點擊checkbox本身 if($check.length > 0 && event.target != $check[0]) { var chkBoxStatus = $check.is("input:checked"); console.log(chkBoxStatus); $check.prop("checked", !chkBoxStatus); } });
雖然問題很小,但是也是學習,總之自己還是需要不斷努力,完善自己。博文只是對自己的總結(jié)
以上就是小編為大家?guī)淼臏\談jQuery綁定事件會疊加的解決方法和心得總結(jié)全部內(nèi)容了,希望大家多多支持腳本之家~
- jquery綁定事件不生效的解決方法
- jQuery中的bind綁定事件與文本框改變事件的臨時解決方法
- jQuery防止重復綁定事件的解決方法
- jQuery中on綁定事件后引發(fā)的事件冒泡問題如何解決
- Jquery on方法綁定事件后執(zhí)行多次的解決方法
- 解決jquery appaend元素中id綁定事件失效的問題
- jQuery給動態(tài)添加的元素綁定事件的方法
- JQuery中綁定事件(bind())和移除事件(unbind())
- JQuery 綁定事件時傳遞參數(shù)的實現(xiàn)方法
- jquery新的綁定事件機制on方法的使用方法
- jQuery動態(tài)添加元素無法觸發(fā)綁定事件的解決方法分析
相關(guān)文章
jQuery插件HighCharts繪制2D半圓環(huán)圖效果示例【附demo源碼下載】
這篇文章主要介紹了jQuery插件HighCharts繪制2D半圓環(huán)圖效果,結(jié)合實例形式分析了jQuery使用HighCharts插件繪制半圓環(huán)圖形的相關(guān)操作技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-03-03IE下使用jQuery重置iframe地址時內(nèi)存泄露問題解決辦法
這篇文章主要介紹了IE下使用jQuery重置iframe地址時內(nèi)存泄露問題解決辦法,需要的朋友可以參考下2015-02-02jQuery中bind(),live(),delegate(),on()綁定事件方法實例詳解
這篇文章主要介紹了jQuery中bind(),live(),delegate(),on()綁定事件方法,結(jié)合實例形式詳細分析了bind(),live(),delegate(),on()方法綁定事件的具體使用技巧,并對比分析了四種方式的異同點,需要的朋友可以參考下2016-01-01JQEasy-ui在IE9以下版本中二次加載的問題分析及處理方法
之前項目中才用了Easy-ui,但是在同時使用tree和grid的效果時,因為頁面有倆個URL,分別為Ajax樹去后臺取數(shù)據(jù)和Grid取數(shù)據(jù),在IE9以上以及其他瀏覽器里都沒有問題,在Ie低版本時會出現(xiàn)先加載表格,然后一閃而過加載樹渲染頁面,造成頁面只有tree數(shù)據(jù)而沒有表格grid數(shù)據(jù)。2014-06-06