zoukankan      html  css  js  c++  java
  • jQuery阻止事件冒泡

    冒泡事件就是点击子节点,会向上触发父节点,祖先节点的点击事件。

    下面是html代码部分:

    复制代码
    <body>
    <div id="content">
        外层div元素
        <span>内层span元素</span>
        外层div元素
    </div>
    
    <div id="msg"></div>
    </body>
    复制代码

    对应的jQuery代码如下:

    复制代码
    <script type="text/javascript">
    $(function(){
        // 为span元素绑定click事件
        $('span').bind("click",function(){
            var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";//获取html信息
            $('#msg').html(txt);// 设置html信息
        });
        // 为div元素绑定click事件
        $('#content').bind("click",function(){
            var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>";
            $('#msg').html(txt);
        });
        // 为body元素绑定click事件
        $("body").bind("click",function(){
            var txt = $('#msg').html() + "<p>body元素被点击.<p/>";
            $('#msg').html(txt);
        });
    })
    </script>
    复制代码

    当点击span时,会触发div与body 的点击事件。点击div时会触发body的点击事件。

    如何防止这种冒泡事件发生呢?

    修改如下:

    复制代码
    <script type="text/javascript">
    $(function(){
           // 为span元素绑定click事件
        $('span').bind("click",function(event){
            var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";
            $('#msg').html(txt);
            event.stopPropagation();    //  阻止事件冒泡
        });
        // 为div元素绑定click事件
        $('#content').bind("click",function(event){
            var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>";
            $('#msg').html(txt);
            event.stopPropagation();    //  阻止事件冒泡
        });
        // 为body元素绑定click事件
        $("body").bind("click",function(){
            var txt = $('#msg').html() + "<p>body元素被点击.<p/>";
            $('#msg').html(txt);
        });
    })
    </script>
    复制代码

    event.stopPropagation(); // 阻止事件冒泡

    有时候点击提交按钮会有一些默认事件。比如跳转到别的界面。但是如果没有通过验证的话,就不应该跳转。这时候可以通过设置event.preventDefault(); //阻止默认行为 ( 表单提交 )。

    下面是案例:

    复制代码
    <script type="text/javascript">
    $(function(){
       $("#sub").bind("click",function(event){
             var username = $("#username").val();  //获取元素的值,val() 方法返回或设置被选元素的值。
             if(username==""){     //判断值是否为空
                 $("#msg").html("<p>文本框的值不能为空.</p>");  //提示信息
                 event.preventDefault();  //阻止默认行为 ( 表单提交 )
             }
       })
    })
    </script>
    复制代码

    html部分:

    复制代码
    <body>
    <form action="test.html">
    用户名:<input type="text" id="username" />
    <br/>
    <input type="submit" value="提交" id="sub"/>
    </form>
    
    <div id="msg"></div>
    </body>
    复制代码

    还有一种防止默认行为的方法就是return false。效果一样。

    代码如下:

    复制代码
    <script type="text/javascript">
    $(function(){
       $("#sub").bind("click",function(event){
             var username = $("#username").val();  //获取元素的值
             if(username==""){     //判断值是否为空
                 $("#msg").html("<p>文本框的值不能为空.</p>");  //提示信息
                 return false;
             }
       })
    })
    </script>
    复制代码

    同理,上面的冒泡事件也可以通过return false来处理。

    复制代码
    <script type="text/javascript">
    $(function(){
           // 为span元素绑定click事件
        $('span').bind("click",function(event){
            var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";
            $('#msg').html(txt);
            return false;
        });
        // 为div元素绑定click事件
        $('#content').bind("click",function(event){
            var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>";
            $('#msg').html(txt);
            return false;
        });
        // 为body元素绑定click事件
        $("body").bind("click",function(){
            var txt = $('#msg').html() + "<p>body元素被点击.<p/>";
            $('#msg').html(txt);
        });
    })
    </script>
  • 相关阅读:
    jsp servlet table 集合list 数据 绑定
    Linux下“/”和“~”的区别
    android 百度地图 定位获取位置失败 62错误
    PostgreSQL 空间数据类型point、 line等
    PostgreSQL 与 PostGIS
    MySQL及navicat for mysql中文乱码
    eclipse报错:Multiple annotations found at this line:
    Multiple markers at this line
    css中绝对定位和相对定位的区别
    关于display的属性:block和inline-block以及inline的区别,float相关说明
  • 原文地址:https://www.cnblogs.com/ganbo/p/4672907.html
Copyright © 2011-2022 走看看