js的冒泡和阻止默认行为

stopPropagation 停止冒泡

preventDefault  阻止默认行为

return false 停止冒泡和阻止默认行为。

冒泡的执行顺序是由触发事件的元素往父级元素层层执行。

但是如果当前元素没有阻止默认行为,而父级元素阻止默认行为,那么默认行为也不会触发。

示例代码

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<div id="parent" style="width: 200px;height: 200px;border: 1px solid red;padding: 10px">
    <span>parent</span>
    <div id="middle" style="border: 1px solid blue;padding: 10px;width: 160px;height: 100px">
        <span>middle</span>
        <br/>
        <a href="111.html" id="self" style="margin-left: 50px;margin-top: 20px">self</a>
    </div>
</div>
<label id="info">

</label>
</body>
</html>

浏览器运行后:

定义事件

1、不阻止默认行为,不阻止冒泡

<script>
    $(document).ready(function(){
        $("#parent").click(function(e){
            console.log("parent is clicked!");
        });
        $("#middle").click(function(e){
            console.log("middle is clicked!");
        });
        $("#self").click(function(e){
            console.log("self is clicked!");
        });
    });
</script>

执行结果:

self is clicked!

middle is clicked!

parent is clicked!

打印完信息后,跳转到111.html

2、当前元素不阻止默认行为,但是父级元素阻止默认行为

<script>
    $(document).ready(function(){
        $("#parent").click(function(e){
            e.preventDefault();
            console.log("parent is clicked!");
        });
        $("#middle").click(function(e){
            console.log("middle is clicked!");
        });
        $("#self").click(function(e){
            console.log("self is clicked!");
        });
    });
</script>

执行结果:

self is clicked!

middle is clicked!

parent is clicked!

打印完信息后,不跳转(默认行为没有执行)

3、当前元素不阻止默认行为,但是阻止冒泡。父级元素仍然阻止默认行为

<script>
    $(document).ready(function(){
        $("#parent").click(function(e){
            e.preventDefault();
            console.log("parent is clicked!");
        });
        $("#middle").click(function(e){
            console.log("middle is clicked!");
        });
        $("#self").click(function(e){
            e.stopPropagation();
            console.log("self is clicked!");
        });
    });

</script>

执行结果:

self is clicked!

打印完信息后,页面跳转到111.html。(说明阻止冒泡之后,父元素的阻止默认行为与当前元素没有关系了。)

时间: 2024-08-15 01:44:15

js的冒泡和阻止默认行为的相关文章

这可能是最简明扼要的 js事件冒泡机制+阻止默认事件 讲解了

哎 js事件冒泡机制和阻止冒泡 阻止默认行为好像永远也整不清楚,记了忘 忘了记...醉了 这篇文章写完以后下次再忘记 就呼自己一巴掌,忘一次一巴掌 首先要明白两个概念--事件和事件流 事件指的是用户或浏览器自身执行的某种动作,又称为原始事件模型,例如onclick等 事件流指的是 从页面中接收事件的顺序,也就是说当一个事件产生时,这个事件的传播过程就叫做事件流. 事件冒泡: 从事件目标开始 一级级向上冒泡,到document为止--从里到外 IE 5:div--body--document; I

JS 之 阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return false的区别

在前端开发中,有时我们需要阻止冒泡和阻止默认事件的发生. 一.event.stopPropagation() 阻止事件的冒泡,不让事件向documen上蔓延,但是默认事件任然会执行,当调用这个方法的时候,如果点击一个连接,这个连接仍然会被打开. 二.event.preventDefault() 阻止默认事件的方法,调用此方法时,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素: 三.return false: 这个方法比较暴力,会同时阻止事件冒泡也会阻止默认事件:写上此代码,连接不会被

js停止冒泡和阻止浏览器默认行为

停止冒泡通用方法: function stopBubble(e) { //如果提供了事件对象,是非IE浏览器 if ( e && e.stopPropagation ) //使用W3C的stopPropagation()方法 e.stopPropagation(); else //使用IE的cancelBubble = true来取消事件冒泡 window.event.cancelBubble = true; } 阻止浏览器默认行为-通用方法 //阻止浏览器的默认行为 function s

阻止事件冒泡,阻止默认事件

阻止事件冒泡 html代码: <table>  <tr>    <td><span>冒泡事件测试</span></td>  </tr></table> js代码: $('table').click(function(){    alert('table');});$('td').click(function(){    alert('td');});$('span').click(function(e){   

jQuery 中的事件冒泡和阻止默认行为

1.事件冒泡: 当点击内部 <span> 元素时,会触发自身及外层 <div> 和 <body> 的点击事件,这就是事件冒泡引起的.事件会随着 DOM 的层次结构依次向上传播. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(

冒泡事件 阻止默认行为

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return false的区别

今天来看看前端的冒泡和事件默认事件如何处理 1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开, 2.event.preventDefault()方法 这是阻止默认事件的方法,调用此方法是,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素: 3.return false  : 这个方法比较暴力,他会同事阻止事件冒泡也会阻止默认事件:写上此代

锋利的jQuery-4--阻止事件冒泡和阻止默认行为

阻止事件冒泡: 如果嵌套元素分别有自己的click事件,当点击内层元素时外层元素的事件也会被触发. $("span").bind("click", function(event){ //代码 event.stopPropagation(); //通过bind创建的事件对象event来执行 } ); 阻止默认行为: 网页中的默认行为,例如链接跳转和form提交,可以通过preventDefault()方法来阻止. $("#submit").bind

阻止事件冒泡和阻止默认行为

// 阻止事件冒泡 function stopBubble(e){ if(e && e.stopPropagation){ e.stopPropagation(); }else{ window.event.cancelBubble = true } } // 阻止默认行为 function stopDefault(e){ if(e && e.preventDefault){ e.preventDefaule() }else{ window.event.returnValue