js中阻止冒泡事件
轉(zhuǎn)載:http://www.myjscode.com/page/article16.html
在一個容器內(nèi)部,某個元素通過on綁定事件,e.stopPropagation()不生效的問題
首先需要了解的是on綁定事件的原理,on事件可以給未出現(xiàn)的dom添加事件,為什么?因?yàn)槲覀兪窃谠氐母冈靥砑拥氖录?#xff0c;通過e.target來定位當(dāng)前點(diǎn)擊的是哪個元素。換句話說,on綁定的事件其實(shí)是綁定在父元素上面的。所以在子元素中阻止冒泡是沒有作用的,還是會觸發(fā)父元素上面的事件。
解決方法:如果父元素綁定了click,子元素也綁定的click,不希望點(diǎn)擊子元素出發(fā)父元素的click。那么在父元素的click響應(yīng)函數(shù)中,判斷$(e.target).closeset(”)選中子元素,如果成立,return掉就可以
如:
<div><tr><td></td></tr> </div>要給tr和td分別綁定一個點(diǎn)擊事件.
//用on()給tr綁定點(diǎn)擊事件 $("div").on("click","tr",function(){alert("tr); }) //用on()給td綁定點(diǎn)擊事件 $("div").on("click","td",function(){alert("tr); })其實(shí)這里的事件都是綁定在div上面的.想避免點(diǎn)擊td觸發(fā)tr的點(diǎn)擊事件,就可以用上面說到的方法來避免冒泡.
如果div外面還有冒泡事件..這時可以直接用
var e = window.event || event;if(e.stopPropagation) {e.stopPropagation();} else {e.cancelBubble = true;}來阻止冒泡.
其實(shí)就是,當(dāng)on()是用同一個父類來進(jìn)行動態(tài)綁定時,就只能用第一種方法,來判斷元素進(jìn)行阻止冒泡.
on()不是使用同一父類進(jìn)行綁定的就可以使用第二種方法進(jìn)行冒泡阻止.
總結(jié)
- 上一篇: WEB视频播放器插件,总结
- 下一篇: 一键卸载docker、docker-co