作者Peruheru (还在想)
看板Ajax
标题Re: [问题] jquery子元素继承问题
时间Sun Dec 6 02:42:18 2009
※ 引述《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: 118.160.160.25
1F:推 etman395:谢谢提供:D 12/06 03:43