`
浅梦U
  • 浏览: 1509 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

jQuery 阻止事件冒泡和阻止标签默认行为(如超链接)

 
阅读更多
最近在写JavaScript时,遇到一个问题,就是页面不该跳转的时候它跳转 ,该跳转的时候它不动 ,百度了很多方法,最终解决了问题 ,现整理如下

1.阻止事件冒泡
事件冒泡一般指向上冒泡,常见于点击(click)事件,我理解就是:我点里面的某一部分,你外面给我好好待着。代码示例如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试冒泡事件</title>
    <script type="text/javascript" src="jqueryjs/jquery-1.11.1.js"></script>
    <script type="text/javascript">
        $(function () {
            $("span").click(function () {
                $("#msg").html($("#msg").html()+"<P>内层span元素被单击</P>");
            });
            $("#content").click(function () {
                $("#msg").html($("#msg").html()+"<P>外层div元素被单击</P>");
            });
            $("body").click(function () {
                $("#msg").html($("#msg").html()+"<P>body元素被单击</P>");
            });
        });
    </script>
</head>
<body>
    <!--<a id="content" style="border: 1px solid red;display: inline-block;" href="http://baidu.com">-->
    <div id="content" style="width: 200px;border: 1px solid red;">
        外层div元素<br>
        <span style="background: silver;border: 2px dashed yellow;">内层span元素</span><br>
        外层div元素
    </div>
    <!--</a>-->
    <br>
    <div id="msg"></div>
</body>
</html>

此时,未编写JavaScript代码来阻止事件冒泡,所以在点击内层span标签之后,三个点击事件(内层span,外层div,body)都会被执行(不会贴图片,麻烦你自己执行看效果咯

现在,我们来添加event.stopPropagation(); 来阻止事件冒泡,代码修改如下(仅修改JavaScript的span部分):
$("span").click(function (event) {
      $("#msg").html($("#msg").html()+"<P>内层span元素被单击</P>");
      event.stopPropagation();        //阻止 span 的 click 事件 冒泡,不让他冒泡到上层div和body
   });
此时,点击内层sapn元素,外层div和body的点击事件将不会再触发,结果请自行验证。

2.阻止标签默认行为
标签默认行为正好相反,它一般指向下继承。常见于超链接a。我的理解是:当超链接a下面有很多span元素时,我希望的效果是点击某个元素,超链接a不跳转;点击其他元素,超链接跳转,可用于做点赞功能。实例代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试冒泡事件</title>
    <script type="text/javascript" src="jqueryjs/jquery-1.11.1.js"></script>
    <script type="text/javascript">
        $(function () {
            $("span").click(function (event) {
                $("#msg").html($("#msg").html()+"<P>内层span元素被单击</P>");
                event.stopPropagation();        //阻止 span 的 click 事件 冒泡,不让他冒泡到上层div和body
            });
            $("#content").click(function () {
                $("#msg").html($("#msg").html()+"<P>外层div元素被单击</P>");
            });
            $("body").click(function () {
                $("#msg").html($("#msg").html()+"<P>body元素被单击</P>");
            });
        });
    </script>
</head>
<body>
    <a id="" style="border: 1px solid red;display: inline-block;" href="http://baidu.com">
        <div id="content" style="width: 200px;border: 1px solid red;">
            外层div元素<br>
            <span style="background: silver;border: 2px dashed yellow;">内层span元素</span><br>
            外层div元素
        </div>
    </a>
    <br>
    <div id="msg"></div>
</body>
</html>

此时,未添加阻止默认行为的JavaScript代码,无论你点击何处超链接都会跳转,而我希望的效果是,点击span超链接不跳转。
现在,我们添加 event.preventDefault();来阻止默认行为,添加一个超链接a点击事件,JavaScript代码如下:
$("#tiao").click(function (event) {
                event.preventDefault();    //阻止默认行为
    });
此时,点击内层sapn元素,超链接a将不会再跳转,结果请自行验证。

3.阻止冒泡事件和默认行为
这是我最终希望的结果:点击span 超链接a不跳转,点击其他部分超链接跳转。html代码和2的代码相同,修改JavaScript代码如下:
$("span").click(function (event) {
        $("#msg").html($("#msg").html()+"<P>内层span元素被单击</P>");
        return false;     //阻止事件冒泡和默认行为
     });
此时,点击span 超链接a不跳转,点击其他部分超链接跳转。结果请自行验证。

写的不好,如有不足之处,还请指教。
谢谢阅读!
分享到:
评论

相关推荐

    jquery 事件冒泡的介绍以及如何阻止事件冒泡

    `是一种常见的阻止事件冒泡和默认行为的方法。与`stopPropagation()`不同,`return false;`会同时阻止事件的冒泡和默认行为。因此,在上述代码中,使用`return false;`后,点击“点击我”只会弹出“我是最里层”的...

    JQuery中DOM事件冒泡实例分析

    总结来说,在JQuery中处理DOM事件冒泡时,要熟悉事件对象的使用、stopPropagation()方法来停止事件冒泡、preventDefault()方法来阻止默认行为以及stopImmediatePropagation()方法来阻止事件继续传播到其他事件处理器...

    深入理解jQuery中的事件冒泡

    然而,事件冒泡也可能带来一些问题,如不必要的事件处理和默认行为。通过使用`event.stopPropagation()`和`event.preventDefault()`方法,我们可以有效地控制事件的传播和默认行为,从而使我们的Web应用更加符合预期...

    浅谈jQuery中的事件

    在JavaScript的世界里,jQuery库以其简洁的...通过事件绑定、合成事件、控制事件冒泡以及阻止默认行为,我们可以更好地控制用户交互,实现丰富的Web应用功能。希望本文能帮助你更好地理解和运用jQuery中的事件处理。

    大麦网jquery焦点图代码

    6. **事件冒泡与阻止默认行为**:在处理焦点图的事件时,可能会涉及到事件冒泡和阻止默认行为,例如阻止用户点击后浏览器的超链接跳转。 7. **Ajax交互**:虽然在标题和描述中没有明确提到Ajax,但在实际应用中,...

    Jquery 模拟用户点击超链接或者按钮的方法

    因此,有时可能需要使用`triggerHandler()`来触发事件而不触发默认行为和事件冒泡,以便更好地控制模拟过程。 在结束这部分内容之前,需要指出的是,虽然上述代码片段很短,但它背后蕴含的知识点非常丰富。无论是...

    学习jQuey中的return false

    在jQuery中,`return false` 是一个非常常用的技巧,它有多种作用,主要涉及阻止事件的默认行为、中断函数执行以及防止事件冒泡。在上述的示例中,`return false` 被用于防止超链接的跳转和阻止表单的提交。 1. **...

    超实用的jQuery代码段

    9.30 用jQuery删除空白标签和具有非中断空格的标签 第10章 jQuery Mobile移动开发技巧 10.1 让页面自适应屏幕宽度 10.2 在移动设备页面中创建多个显示视图 10.3 创建对话框显示效果 10.4 从外部文件中加载页面内容 ...

    用jquery实现的一个超级简单的下拉菜单

    接着,我们设置了.sub-menu类的ul元素默认是隐藏的(display:none),并且在鼠标悬浮在具有.sub-menu子列表的li元素上时,通过CSS的:hover伪类改变子菜单的样式,如背景色和文字颜色。 接下来,我们引入jQuery的...

    前端面试宝典V3.0.docx

    - **阻止事件冒泡**:使用 `event.stopPropagation()` 方法。 - **JavaScript 动画与 CSS3 动画的区别**:JavaScript 动画通常使用定时器实现,而 CSS3 动画使用 CSS 属性变化。 #### Event Loop 事件循环 - **事件...

Global site tag (gtag.js) - Google Analytics