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

看板Ajax作者 (技術時代)時間14年前 (2009/12/06 03:00), 編輯推噓1(105)
留言6則, 1人參與, 最新討論串3/7 (看更多)
XD 解決了 用第一種 if (event.target == this) {要做的事...} 其它二種沒有用 不知道為啥 我跟你應該是看同一本書吧XD 只是我記得當時好像是講事件冒泡 我一直以為那是阻止往上觸發和預設行為 所以沒有用在這裡 雖然解決了 不過解的有點不理解XD 為什麼只有 if (event.target == this)這個有效 其它二個無效 難不成其它二個是純阻止往上觸發和預設行為嗎?? ※ 引述《Peruheru (還在想)》之銘言: : ※ 引述《etman395 (技術時代)》之銘言: : : 我在試一個menu : : 點擊ul li才會出現 : : 再點擊同一個ul 那個ul 的li就會隱藏 : : 或者點擊別的ul 另一個己經展開的ul裡的li就會隱藏 : : 但我發現一個問題 : : 就是我點擊ul 裡的li li一樣會繼承ul的click事件 : : 請問怎麼讓子元素不繼承父元素的事件? : : jquery 程式如下 : : $(function(){ : : $("ul li").hide(); : : var c =function(){ : : $(this).children().toggle().end().siblings().children().hide(); : : } : : $("ul").bind("click",c) : : }) : : </script> : 剛好在看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

12/06 03:05, , 1F
這我就不曉得了,其實第三種方法我以前試過也沒效
12/06 03:05, 1F

12/06 03:06, , 2F
沒辦法真的阻止預設行為...我也不知怎麼搞的
12/06 03:06, 2F

12/06 03:06, , 3F
最後是乾脆不要做submit鈕,只用button偽裝
12/06 03:06, 3F

12/06 03:07, , 4F
就不用再為了預設行為想破頭腦
12/06 03:07, 4F

12/06 03:07, , 5F
可能是流程上還有沒搞懂的部分,所以沒辦法使用吧
12/06 03:07, 5F

12/06 03:08, , 6F
不過既然你跟我看同本書,怎麼還需要上來問這個呢?
12/06 03:08, 6F
文章代碼(AID): #1B6gtV-t (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1B6gtV-t (Ajax)