成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用dataTables組件制作可編輯table單元格時blur、 mouseleave以及mous

MadPecker / 2296人閱讀

摘要:問題出現(xiàn)的場景是使用組件,但是該組件沒有自帶的編輯功能,所以需要自己處理在行內(nèi)編輯的效果。需要注意一點(diǎn),我們在使用綁定事件的時候,重復(fù)的事件是不會被清除的,而是會累加,所以,在中重新添加事件之前,需要將之前的先清除。

問題出現(xiàn)的場景是:
使用dataTables組件,但是該組件沒有自帶的編輯功能,所以需要自己處理table在行內(nèi)編輯的效果。

目標(biāo)效果是:
1.當(dāng)hover到當(dāng)前tr的時候,該行tr中可以編輯的td中出現(xiàn)一個input框:

2.當(dāng)離開當(dāng)前tr的時候,該行退出可編輯的狀態(tài),恢復(fù)到?jīng)]有hover上去之前的效果。

3.當(dāng)td變成可編輯狀態(tài),即出現(xiàn)了一個input輸入框的時候,focus到input輸入框中,可以輸入number;當(dāng)input框發(fā)生blur事件的時候,td恢復(fù)到非編輯狀態(tài):

由于blur和moseleave都會讓輸入框恢復(fù)到非編輯的狀態(tài),所以,這里的事件會有沖突。

在實際的編碼中,在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 = $("
"); put.children(".edit-input-box").val(txt); jqob.html(put); }); } $("#table_id_example tbody").on("mouseenter", "tr",mouseenterEvt );
mouseleave事件的綁定:
$("#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 )
    }
});

對于事件解綁和重新綁定的解釋:

當(dāng)沒有進(jìn)行事件的解綁和重新綁定的時候,在input框中輸入結(jié)束,點(diǎn)擊input所在的td的時候,會接著觸發(fā)mouseenter事件;但是當(dāng)點(diǎn)擊該input所在的td之外的td的時候,就會發(fā)生blur事件和mouseleave事件。

為了,在點(diǎn)擊當(dāng)前input所在的td的時候,只發(fā)生blur事件,需要在blur事件結(jié)束之后,刪除mouseenter事件的綁定。這樣,tr的mouseenter事件被刪除了就不會觸發(fā)了。

但是,在當(dāng)前行blur之后,再進(jìn)入其他的行依舊需要能夠編輯,又由于編輯完一行之后,肯定是會mouseleave該行的,因此,在tr的mouseleave事件中又將tr的mouseenter事件加回去。

需要注意一點(diǎn),我們在使用jq綁定事件的時候,重復(fù)的事件是不會被清除的,而是會累加,所以,在mouseleave中重新添加事件之前,需要將之前的先清除。在這里就是:在mousenter之后根本沒有對input進(jìn)行編輯就mouseleave了,此時在mouseleave中若不先清除原有的事件,那么tr上的mouseenter事件就會被添加兩次。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/101873.html

相關(guān)文章

  • jQuery Event Menthods

    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...

    khlbat 評論0 收藏0
  • layui數(shù)據(jù)表格使用(一:基礎(chǔ)篇,數(shù)據(jù)展示、分頁組件、表格內(nèi)嵌表單和圖片)

    摘要:表格展示神器之一表格前言在寫后臺管理系統(tǒng)中使用最多的就是表格數(shù)據(jù)展示了,使用表格組件能提高大量的開發(fā)效率,目前主流的數(shù)據(jù)表格組件有等博主個人比較傾向于,極簡,卻又不失飽滿的內(nèi)在,體積輕盈,組件豐盈。 表格展示神器之一:layui表格 前言:在寫后臺管理系統(tǒng)中使用最多的就是表格數(shù)據(jù)展示了,使用表格組件能提高大量的開發(fā)效率,目前主流的數(shù)據(jù)表格組件有bootstrap table、layui ...

    番茄西紅柿 評論0 收藏0
  • JavaScript DOM 事件初探

    摘要:級事件規(guī)定的事件流包括三個階段事件捕獲階段處于目標(biāo)階段和事件冒泡階段。對象只存在于事件處理程序執(zhí)行期間,一旦執(zhí)行完畢,立即被銷毀。焦點(diǎn)事件焦點(diǎn)事件會在頁面元素獲得或失去焦點(diǎn)時觸發(fā)。 JavaScript DOM 事件初探 原文鏈接 事件,就是文檔或瀏覽器窗口中發(fā)生的一些特定的交互瞬間,比如單擊、雙擊、鼠標(biāo)懸浮等。 事件流 事件流描述的是從頁面中接收事件的順序,或者說是事件在頁面中傳播...

    Moxmi 評論0 收藏0
  • JavaScript 事件——“事件類型”中“焦點(diǎn)、鼠標(biāo)和滾輪事件”的注意要點(diǎn)

    摘要:焦點(diǎn)事件一般利用這些事件與方法和屬性配合。此外,支持一個名為的類似事件,也是在鼠標(biāo)滾動滾輪時除法。 焦點(diǎn)事件 一般利用這些事件與document.hasFocus()方法和document.activeElement屬性配合。主要有: blur:元素失去焦點(diǎn),不會冒泡; DOMFocusIn:同HTML事件focus,于DOM3遭廢棄,選用focusin; DOMFocusOut:同...

    clasnake 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<