摘要:問題出現的場景是使用組件,但是該組件沒有自帶的編輯功能,所以需要自己處理在行內編輯的效果。需要注意一點,我們在使用綁定事件的時候,重復的事件是不會被清除的,而是會累加,所以,在中重新添加事件之前,需要將之前的先清除。
問題出現的場景是:
使用dataTables組件,但是該組件沒有自帶的編輯功能,所以需要自己處理table在行內編輯的效果。
目標效果是:
1.當hover到當前tr的時候,該行tr中可以編輯的td中出現一個input框:
2.當離開當前tr的時候,該行退出可編輯的狀態,恢復到沒有hover上去之前的效果。
3.當td變成可編輯狀態,即出現了一個input輸入框的時候,focus到input輸入框中,可以輸入number;當input框發生blur事件的時候,td恢復到非編輯狀態:
由于blur和moseleave都會讓輸入框恢復到非編輯的狀態,所以,這里的事件會有沖突。
在實際的編碼中,在tr上綁定了mouseenter和mouseleave事件;
mouseenter事件的綁定:function mouseenterEvt (e) { var tds = $(this).children("td"); $.each(tds, function (i, val) { var jqob = $(val); if (i !== 3) { return true; } // if there is something validate wrong,stay there width no value exchange var validateSpanDom = jqob.find("span"); var value = validateSpanDom ? validateSpanDom.text() : ""; var validateTxt = validateInputBox(value); if(validateTxt) return false; // open edit mode jqob.addClass("edit-btn-display"); var txt = jqob.text(); txt = txt.replace("$", ""); txt = txt.replace(/,/g, ""); var put = $("mouseleave事件的綁定:"); put.children(".edit-input-box").val(txt); jqob.html(put); }); } $("#table_id_example tbody").on("mouseenter", "tr",mouseenterEvt );
$("#table_id_example tbody").on("mouseleave", "tr", function (e) { var row = tableDom.row($(this)); var tds = $(this).children("td"); $.each(tds, function (i, val) { var jqob = $(val); if (jqob.hasClass("edit-btn-display") && jqob.find(".edit-input-box").length > 0) { // if there is something validate wrong,stay there width no value exchange var validateSpanDom = jqob.find("span"); var value = validateSpanDom ? validateSpanDom.text() : ""; var validateTxt = validateInputBox(value); if(validateTxt) return false; var txt = jqob.find(".edit-input-box").val(); txt = txt.replace("$", ""); if(String(txt).indexOf(".") !== -1 ) { txt = Number(txt).toFixed(2); } jqob.html(txt); tableDom.cell(jqob).data(txt); // close edit mode jqob.removeClass("edit-btn-display"); } }); $("#table_id_example tbody").off("mouseenter", "tr",mouseenterEvt ) $("#table_id_example tbody").on("mouseenter", "tr",mouseenterEvt ) });
在input輸入框上綁定了blur事件:
blur事件的綁定:$("#table_id_example tbody").on("blur", ".edit-input-box", function (e) { var value = $(this).val(); var validateTxt = validateInputBox(value) if (!validateTxt) { var td = $(this).parents("td"); var row = tableDom.row($(td)); $(this).toggleClass("edit-btn-being-edit"); var txt = $(this).val(); txt = txt.replace("$", ""); if(String(txt).indexOf(".") !== -1 ) { txt = Number(txt).toFixed(2); } td.html(txt); tableDom.cell(td).data(txt);//change data of DataTables obj var data = row.data(); //alert("save current monthly-budget value") $("#table_id_example tbody").off("mouseenter", "tr",mouseenterEvt ) } });
對于事件解綁和重新綁定的解釋:
當沒有進行事件的解綁和重新綁定的時候,在input框中輸入結束,點擊input所在的td的時候,會接著觸發mouseenter事件;但是當點擊該input所在的td之外的td的時候,就會發生blur事件和mouseleave事件。
為了,在點擊當前input所在的td的時候,只發生blur事件,需要在blur事件結束之后,刪除mouseenter事件的綁定。這樣,tr的mouseenter事件被刪除了就不會觸發了。
但是,在當前行blur之后,再進入其他的行依舊需要能夠編輯,又由于編輯完一行之后,肯定是會mouseleave該行的,因此,在tr的mouseleave事件中又將tr的mouseenter事件加回去。
需要注意一點,我們在使用jq綁定事件的時候,重復的事件是不會被清除的,而是會累加,所以,在mouseleave中重新添加事件之前,需要將之前的先清除。在這里就是:在mousenter之后根本沒有對input進行編輯就mouseleave了,此時在mouseleave中若不先清除原有的事件,那么tr上的mouseenter事件就會被添加兩次。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101873.html
Here are some common DOM events 1 Mouser Events click dbclick mouseenter mouseleave 2 Keyborars Events keypress keydown keyup 3 Form Events submit change focus blus 4 Docment/Wiindow Events laod re...
摘要:表格展示神器之一表格前言在寫后臺管理系統中使用最多的就是表格數據展示了,使用表格組件能提高大量的開發效率,目前主流的數據表格組件有等博主個人比較傾向于,極簡,卻又不失飽滿的內在,體積輕盈,組件豐盈。 表格展示神器之一:layui表格 前言:在寫后臺管理系統中使用最多的就是表格數據展示了,使用表格組件能提高大量的開發效率,目前主流的數據表格組件有bootstrap table、layui ...
摘要:級事件規定的事件流包括三個階段事件捕獲階段處于目標階段和事件冒泡階段。對象只存在于事件處理程序執行期間,一旦執行完畢,立即被銷毀。焦點事件焦點事件會在頁面元素獲得或失去焦點時觸發。 JavaScript DOM 事件初探 原文鏈接 事件,就是文檔或瀏覽器窗口中發生的一些特定的交互瞬間,比如單擊、雙擊、鼠標懸浮等。 事件流 事件流描述的是從頁面中接收事件的順序,或者說是事件在頁面中傳播...
摘要:焦點事件一般利用這些事件與方法和屬性配合。此外,支持一個名為的類似事件,也是在鼠標滾動滾輪時除法。 焦點事件 一般利用這些事件與document.hasFocus()方法和document.activeElement屬性配合。主要有: blur:元素失去焦點,不會冒泡; DOMFocusIn:同HTML事件focus,于DOM3遭廢棄,選用focusin; DOMFocusOut:同...
閱讀 1035·2021-11-22 13:53
閱讀 1591·2021-11-17 09:33
閱讀 2392·2021-10-14 09:43
閱讀 2851·2021-09-01 11:41
閱讀 2272·2021-09-01 10:44
閱讀 2911·2021-08-31 09:39
閱讀 1450·2019-08-30 15:44
閱讀 1862·2019-08-30 13:02