在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ jquery on click事件綁定又解綁

jquery on click事件綁定又解綁

emmm,還是上代碼比較清晰點(diǎn),實(shí)在是不知道怎么描述這個(gè)了

 //光標(biāo)處插入標(biāo)簽code,動(dòng)態(tài)綁定
            $("#tagList").on("click","li",function () {
                    $(this).unbind("click").click(function () {
                        var selectedTag = $.trim($(this).text());
                        tmplTagListObj.forEach(function (item, index) {
                            if (item.name == selectedTag) {
                                $("#tplContent").insertAtCaret("$" + "{" + item.code + "}");
                            }

                        })
                    })
                // }
            });
       

上面是點(diǎn)擊li標(biāo)簽進(jìn)行一個(gè)文字插值的操作,(insertAtCaret這個(gè)是插值的函數(shù),正常無問題)
效果如下圖
圖片描述

點(diǎn)擊一下標(biāo)題會自動(dòng)生成一個(gè)$(title)的占位符,標(biāo)簽?zāi)且粰诳梢詣?dòng)態(tài)添加新的標(biāo)簽
原先的做法是直接綁定點(diǎn)擊事件,出現(xiàn)的bug如下:
約束就是同一彈出框的標(biāo)簽名不能重復(fù),不同彈框下的標(biāo)簽名可以重復(fù)
對a彈出框添加一個(gè)標(biāo)簽,叉掉a彈框之后,在b彈出框再動(dòng)態(tài)添加一個(gè)名稱相同的標(biāo)簽,點(diǎn)擊一下會生成兩個(gè)占位符,重復(fù)操作,到了c彈出框就是三個(gè)相同的占位符,以此類推

于是改成了問題描述里的寫法,很顯然,這種寫法第一次點(diǎn)擊毫無反應(yīng),一切正常反應(yīng)都從鼠標(biāo)第二次點(diǎn)擊開始
我想知道
如何解決第一次點(diǎn)擊不生效的情況?
ps:嘗試在外面一層模擬一次點(diǎn)擊事件,不起作用,然后在里面一層模擬一次點(diǎn)擊事件,F(xiàn)12里面打印出很多次的console數(shù)據(jù),同不起作用

回答
編輯回答
夕顏

很明顯你在叉掉標(biāo)簽之后 沒有清理tmplTagListObj這個(gè)里面的數(shù)據(jù) 新添加相同的標(biāo)簽之后 實(shí)際上tmplTagListObj里面已經(jīng)存在了一個(gè)相同的標(biāo)簽

而你click事件里面用forEach遍歷了tmplTagListObj 導(dǎo)致多次進(jìn)入if語句 然后就添加了多個(gè)占位符

2017年3月6日 21:26