一、由於某些特殊情況下,需要用到事件委托,比如給動態創建的DOM綁定click事件,這里就需要事件委托(這里就牽扯到:目標元素和代理元素)
目標元素:動態創建的元素,最終click事件需要綁定到該元素
代理元素:動態創建的元素的父級元素,或者document,body等。
二、BUG情況
當使用事件委托給【目標元素】添加 click 事件時,如果【代理元素】是 document或body,並且【目標元素】是默認不可點擊的(如 div, span 等),此時click事件會失效。如果【目標元素】是可點擊的(比如 button、a 標簽),此時click事件還是有效的。
三、解決方案3種
1、【代理元素】可以是【目標元素】的父級元素,document,body等,但【目標元素】必須為a或者button可點擊的標簽。
盡量使用touch事件或者tap事件,如果你需要click事件的延遲效果來達到某些交互,盡量把click事件綁定在a或者button可點擊的標簽上。
2、【代理元素】必須是【目標元素】的非document,body父級元素,【目標元素】可以是任意標簽。
將click事件委托到非document或body的父級元素上。
3、【代理元素】可以是【目標元素】的父級元素,document,body等,【目標元素】可以是任意標簽,但是要設置cursor: pointer;。
出現上述點擊事件失效的問題,讓我們不得不體會到標簽語義化的重要性,於是這里建議大家寫代碼時,【目標元素】多用a或者button可點擊的標簽,【代理元素】多用非document,body父級元素。
本人摘自:http://www.cnblogs.com/camille666/
