一毅否、問題描述
碰到一個非常頭疼的問題厅翔,為了做一個滑動效果,給li標簽綁定了touch事件搀突〉睹疲滑動之后,li標簽的末尾會出現(xiàn)一個刪除按鈕仰迁,然后點擊該刪除按鈕甸昏,刪除整個li標簽。
看起來沒什么問題吧徐许,實際上暗藏殺機啊施蜜。給刪除按鈕綁定點擊事件的時候,并沒有執(zhí)行點擊事件雌隅,而是先執(zhí)行了父元素翻默,也就是li標簽的touch事件。
那怎么解決呢恰起?
最開始想到的是修械,click事件應該設置成冒泡階段執(zhí)行,在設置個阻止冒泡检盼,這樣不就不會觸發(fā)父元素的touch事件了肯污。貌似很有道理。試了試,然并卵蹦渣。
再分析哄芜,點擊的時候,首先執(zhí)行的就是touch事件柬唯,并不是冒泡階段才執(zhí)行的认臊。也就是說我在點擊刪除按鈕的時候必須把父元素的touch事件給禁止掉。
怎么解決锄奢?
二美尸、解決方法
(1)方案一:
最簡單的方法,把刪除按鈕寫在li標簽的外面斟薇。這樣li標簽就不是刪除按鈕的父元素了。點擊刪除按鈕的時候就不會觸發(fā)li標簽的touch事件了恕酸。
這個方案跟本文的主題不是很符合對不對堪滨,沒有解決核心問題。好蕊温,還有方案二袱箱。
(2)方案二:
在父元素的touch事件中進行判斷,如果觸發(fā)父元素的事件源是刪除按鈕的時候义矛,父元素的touch事件就不執(zhí)行发笔。
思路有了,怎么寫代碼呢凉翻。
e.target有沒有想到了讨,通過判斷這個就可以實現(xiàn)上面的思路了。
代碼如下:
deletes.forEach(function(v,i){
if(v == e.target){
flag = 1;
}
})
if(flag){
flag = 0 ;
return;
}
deletes為多有的刪除按鈕制轰。把這段代碼放到touchstart,touchmove,touchend事件中去前计。這樣就可以阻止touch事件的執(zhí)行了。而綁定在delete按鈕上的click事件可以順利執(zhí)行