作者ybite (小犬)
看板Ajax
标题Re: [ js ] 如何disable上一层的事件
时间Mon Jul 26 16:43:52 2010
※ 引述《knives ()》之铭言:
: 我的Html是这样
: <div id="Lv1">
: <div id="Lv2">
: </div>
: </div>
: 我同时在Lv1、Lv2都有加上click事件
: 可是我希望Lv2按了之後,不要触发上一层的事件
: 我在Lv2的事件 function 後面有加上 return false;
: 但是Lv1的事件依然被呼叫了
: 请问要怎麽用jquery暂时disable Lv1的事件
: 谢谢
$("#Lv2").click(clickLv2);
function clickLv2(event) {
// Do something...
event.stopPropagation();
}
关键点:
1. jQuery 的 click 会把「浏览器问题修正过」的 event 当成参数传进你指定的函式
2. stopPropagation(); 是 W3C DOM 标准的 Event 函式之一
指「阻止 Event 往父元素传递(bubbling)
虽然IE不支援这个函式,但jQuery偷偷帮你修好了
如果您要使用 onclick 而非 jQuery 的 Event 功能的话
就需要自己解决 IE 的问题罗 QQ
jQuery 在 Event 方面作了很多浏览器修正,请多爱用 QQ
---
另外据说 .live() 不支援 stopPropagation(); ?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.225.1.126
※ 编辑: ybite 来自: 61.225.1.126 (07/26 16:46)
1F:→ knives:请问clickLv2(event) 里面的event可以不要写吗,因为我有另 07/26 16:50
2F:→ knives:外带别的参数名称 07/26 16:50
3F:→ knives:还有我是写onclick="ajaxget(url,ajaxid"),那里面还是写 07/26 16:53
4F:→ knives: event.stopPropagation();吗,还是没有效果 07/26 16:53
Then, how about this,虽然看起来很丑 qq。
顺便补充一点,这个应该要写在$(document).ready里。
<script type="text/javascript">
$(document).ready(function() {
// ...
$("#Lv2").click(function(event) {
ajaxget(url, ajaxid);
event.stopPropagation();
});
});
</script>
一个很大的问题是:你的url和ajaxid是从哪来的,是怎麽存的?
如果他是存在 JavaScript 的变数里,那麽它会是 Global varible。
如果是这样的话这个作法就应该没错。
用onclick喔...微妙。因为对IE而言,你要用
window.event.cancelBubble = true
来达到相同效果,为了处理这件事情HTML Code会很难看qqqqq
※ 编辑: ybite 来自: 61.225.1.126 (07/27 02:53)