• 解决Jquery中click里面包含click事件,出现重复执行的问题


    出现问题的代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN">
    <head>
    <title>Document</title>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <meta name="description" content="" />
    <meta name="keywords" content="" />
    <style type="text/css">
        * {margin: 0; padding: 0;}
        #table {border: 1px solid gray; border-collapse: collapse;  500px;}
        tr {height: 30px;}
        th {border: 1px solid gray;}
        td {border: 1px solid gray;text-align: center;}
        td a {margin-right: 5px; color: blue; text-decoration: none;}
    
        #popDiv, #editDiv {border: 1px solid silver;  315px; padding: 1px; margin-top: 10px; position: absolute; left: 38%; z-index: 4; display: none;}
        .pop p {height: 30px; margin-top: 20px; clear: both;}
        .pop a {display: block; float: right; text-decoration: none; font-size: 12px;}
        .pop .input {height: 20px; line-height: 20px;}
        /*#bottom { 100%; height: 30px; margin: 0 auto;}*/
        #sub {display: block; height: 30px; margin: 0 auto;}
    
        .mask {background-color: #000; position: absolute; left: 0; top: 0; z-index: 2;}
    </style>
    <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.0.min.js"></script>
    </head>
    <body>
        <table id="table">
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>职位</th>
                <th>工资</th>
                <th>操作</th>
            </tr>
            <tr>
                <td>张三</td>
                <td>23</td>
                <td>PHP</td>
                <td>79999</td>
                <td><a href="#" class="edit">修改</a></td>
            </tr>
            <tr>
                <td>李四</td>
                <td>21</td>
                <td>Java</td>
                <td>12000</td>
                <td><a href="#" class="edit">修改</a></td>
            </tr>
            <tr>
                <td>王五</td>
                <td>34</td>
                <td>Python</td>
                <td>29999</td>
                <td><a href="#" class="edit">修改</a></td>
            </tr>
            <tr>
                <td>赵六</td>
                <td>37</td>
                <td>Javascript</td>
                <td>65450</td>
                <td><a href="#" class="edit">修改</a></td>
            </tr>
        </table>
    
        <div id="editDiv" class="pop">
            <a href="#" class="close">close</a>
            <p><strong>姓名:</strong><input type="text" class="input" /></p>
            <p><strong>年龄:</strong><input type="text" class="input" /></p>
            <p><strong>职位:</strong><input type="text" class="input" /></p>
            <p><strong>工资:</strong><input type="text" class="input" /></p>
            <input type="button" id="sub" value="提交" />
        </div>
    
        <script type="text/javascript">
            // 点击'修改'链接
            $('a.edit').click(function () {                     
                var arr = [];
    
                $(this).parent().siblings().each(function () {
                    arr.push($(this).text());
                });
    
                $('#editDiv').show().find('p').each(function (i) {
                    $(this).find('input:text').val(arr[i]);
                });
    
    
    
                var aTr = $(this);
    
                $('#sub').click(function () {
                    alert('2222222');
                    var data = [];
                    $(this).prevUntil('a.close').each(function () {
                        data.push($(this).find('input:text').val());
                    });
    
                    data.reverse();
    
                    aTr.parent().siblings().each(function (i) {
                        $(this).text(data[i]);
                    });
    
                    $(this).parent().hide();
                    $('div.mask').remove();
                });
    
                // 添加遮罩层
                var maskHeight = $(document).height();
                var maskWidth = $(document).width();
                $('<div class="mask"></div>').appendTo($('body'));
                $('div.mask').css({
                    'width':maskWidth,
                    'height':maskHeight,
                    'opacity':0.4
                });
            });
    
            $('a.close').click(function () {
                $(this).parent().hide();
                $('div.mask').remove();
            });
        </script>
    </body>
    </html>

    解决方法一:

    $('#sub').unbind('click').click(function () {
        ...
    });

    每次绑定前先取消上次的绑定。  

    方法二:

     内层绑定事件之前,先解除事件目标对象上绑定的事件。

    $(function(){
    $("#sub").click(function(){
    XXX
    $(".close").off("click"); //解除绑定的点击事件
    $("#XXX").click(function(){
    XXX
    })
    })
    })

    方法三:

    用原生JS实现点击,注意这个如果是用class实现点击,请用:querySelector,用getElementsByClassName无效:

    document.querySelector(".xx").onclick = function(){
    XXX
    }



    document.getElementById('sub').onclick = function () {
                    alert('1111111');
                    var data = [];
                    $(this).prevUntil('a.close').each(function () {
                        data.push($(this).find('input:text').val());
                    });
    
                    data.reverse();
    
                    aTr.parent().siblings().each(function (i) {
                        $(this).text(data[i]);
                    });
    
                    $(this).parent().hide();
                    $('div.mask').remove();
                };
  • 相关阅读:
    「小程序JAVA实战」java-sesion的状态会话与无状态会话(38)
    「小程序JAVA实战」小程序 loading 提示框与页面跳转(37)
    「小程序JAVA实战」小程序登录与后端联调(36)
    phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护
    基于Bootstrap简单实用的tags标签插件
    html 中几次方,平方米,立方米,下标,上标,删除线等的表示方法
    如何做好App的引导页?(转)
    个推+DCLOUD,推送消息和透传消息
    AXURE在原型设计中的应用
    ***敏捷软件测试--初见
  • 原文地址:https://www.cnblogs.com/smedas/p/12580706.html
Copyright © 2020-2023  润新知