Re: [問題] jquery子元素繼承問題

看板Ajax作者 (技術時代)時間14年前 (2009/12/06 03:28), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/7 (看更多)
可能不是同一本XD 因為if (event.target == this) 這個解決的方式 我那本書在阻止事件冒泡上沒有一樣寫法 剛仔細翻了一下 事件向上觸發 才叫冒泡 只有父元素有相同事件就會一直觸發上去 bind("click",function(event){ event.stopPropagation(); //這是阻止事件冒泡 event.preventDefault(); //這是阻止預設行為 return false; //可以代替以上簡寫 我試過是有效的 但僅只於阻止冒泡不能阻止補獲 } 事件向下觸發 叫做事件補獲 剛好和冒泡相反 而且有點不同 不同的地方在於 子元素會繼承父元素的事件 而事件冒泡是觸發父元素相同的事件 而我那本書裡是提到 jquery不支持事件補獲 必須要用javascript來阻止 看來阻止的方式就是剛解決的這行了 if (event.target == this) ※ 引述《etman395 (技術時代)》之銘言: : XD 解決了 : 用第一種 : if (event.target == this) {要做的事...} : 其它二種沒有用 不知道為啥 : 我跟你應該是看同一本書吧XD : 只是我記得當時好像是講事件冒泡 : 我一直以為那是阻止往上觸發和預設行為 : 所以沒有用在這裡 : 雖然解決了 : 不過解的有點不理解XD : 為什麼只有 if (event.target == this)這個有效 : 其它二個無效 難不成其它二個是純阻止往上觸發和預設行為嗎?? : ※ 引述《Peruheru (還在想)》之銘言: : : 剛好在看jQuery的入門書 : : 這本說得比較詳細,有說到防止事件傳遞給後代元素的方法 : : 第一種: : : 使用event物件來檢查 : : 例: : : $('#btn').bind("click",function(event){ : : if (event.target == this) { : : ....(你要做的事).... : : } : : }); : : 就是在function宣告時多加一個event物件 : : 它的target屬性就表示著現在觸發事件的對像 : : 檢查它就能確保發生的對像是你要的 : : 第二種: : : 使用另外一個event的內建函式來阻擋事件繼續傳播 : : 例: : : $('#btn').bind("click",function(event){ : : ....(你要做的事).... : : ... : : event.stopPropagation(); : : }); : : 這就是呼叫event物件的函式,命令其停止事件繼續送到別的元素上 : : jQuery有去解決跨瀏覽器的相容 : : 所以這應該可行 : : 不過要注意這無法停止預設行為 : : 像是在表單上按enter預設會submit出去這個行為 : : 光靠這樣不夠 : : 還得加上同樣是event物件的.preventDefault()方法 : : 或是直接使用第三種方法 : : 第三種: : : 直接return false : : 這就直接把 : : return false; : : 這行指令加在function內的最後一行就行了 : : 這就不用範例了吧XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.110.83.12 ※ 編輯: etman395 來自: 123.110.83.12 (12/06 03:34)
文章代碼(AID): #1B6hHi1z (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1B6hHi1z (Ajax)