美文网首页web前端
阻止事件冒泡和禁用默认事件

阻止事件冒泡和禁用默认事件

作者: Setsuna_F_Seiei | 来源:发表于2019-08-20 14:16 被阅读0次

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Document</title>

</head>

<body>

<table border="1">

<tr>

<td><span>冒泡事件测试1</span></td>

<td><span>冒泡事件测试2</span></td>

</tr>

</table>

</body>

<a href="http://www.baidu.com">测试</a>

<script src="./js/jquery-3.4.1.min.js" type="text/javascript" charset="utf-8"></script>

<!--

1.<script src="script.js"></script>

没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 script 标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行。

2.<script async src="script.js"></script>

有 async,加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(异步)。

3.<script defer src="myscript.js"></script>

有 defer,加载后续文档元素的过程将和 script.js 的加载并行进行(异步),但是 script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成。

-->

<script type="text/javascript" charset="utf-8">

// $('table').on('click',function(e){

// alert('table alert!');

// });

// $('tr').on('click',function(e){

// alert('tr alert');

// });

//    $('span').on('click',function(e){

//    alert('span alert');

//    });

    // span alert -> td alert -> table alert。这就叫事件冒泡。就是从下到上,从里到外,事件依次触发。

    $(function(){

    return false  //return false等效于同时调用e.preventDefault()和e.stopPropagation(),从源码中可以看到该功能的实现。

$('table').on('click','span',function(e){    

//个人理解是禁止该元素的子元素到该元素的事件冒泡。

    alert('span alert');

    e.stopPropagation();

    });

    $('tr').on('click','span',function(e){

    alert('span alert');

    e.stopPropagation();

    });

    $('table').on('click',function(){

    alert('table alert!')

    });

    $('tr').on('click',function(){

    alert('table alert!')

    });

    })

    // 点击span时,弹出"span alert!"对话框即结束,然后禁止事件冒泡,“table alert!”对话框即不会触发。

    $("a").click(function (e) {

    alert("默认行为被禁止喽");

    return false

    // e.preventDefault();  //阻止默认事件,就是停止元素原本的功能

});

</script>

</html>

相关文章