作者etman395 (技术时代)
看板Ajax
标题Re: [问题] jquery子元素继承问题
时间Sun Dec 6 03:00:45 2009
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
1F:推 Peruheru:这我就不晓得了,其实第三种方法我以前试过也没效 12/06 03:05
2F:→ Peruheru:没办法真的阻止预设行为...我也不知怎麽搞的 12/06 03:06
3F:→ Peruheru:最後是乾脆不要做submit钮,只用button伪装 12/06 03:06
4F:→ Peruheru:就不用再为了预设行为想破头脑 12/06 03:07
5F:→ Peruheru:可能是流程上还有没搞懂的部分,所以没办法使用吧 12/06 03:07
6F:→ Peruheru:不过既然你跟我看同本书,怎麽还需要上来问这个呢? 12/06 03:08