jquery 事件冒泡
首先可以来看一个例子:
1 | <div id="dOne" onclick="alert('我是最外层')"> |
上面这个示例分3层:dOne 最外面一层,dTwo中间层,a标签在最里层,他们各自有自己的onclick事件。
运行后会发现一次弹出我是最里层-->我是中间层-->我是最外层然后跳转到百度。
那么为什么会这样呢?
这个就要讲讲jquery的事件冒泡了。
在一个对象上触发某类事件(比如单击事件),如果此对象定义了处理此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义出此事件的处理程序或者事件返回true,那么这个事件就会向这个对象的父级对象传播,从里到外,直至他被处理,或者到达对象层次的最顶层,即document对象(有些是window)
然而有时候这并不是我们所需要的,那该如何处理呢?
我们可以阻止事件的冒泡行为。
- event.stopPropagation();
1 | $(function() { |
这时候就会发现只有 我是最里层被执行,然后跳转至百度,达到了阻止事件往外冒泡。
- return false
1 | $(function() { |
也是只有 我是最里层被执行,虽然阻止了事件往外冒泡,但是却不跳转百度。
- event.preventDefault();
1 | $(function() { |
运行后依次出现我是最里层-->我是中间层-->我是最外层 但是不跳转百度
总结
- event.stopPropagation();
事件处理过程中,阻止了事件的冒泡,不会阻止默认行为。
- return false;
事件处理过程中,阻止了事件的冒泡,但是也阻止了默认行为。
- event.preventDefault();
事件处理过程中,不阻止冒泡,但是阻止默认行为。