ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

jquery中给动态生成的标签添加点击事件

2021-07-02 00:00:35  阅读:386  来源: 互联网

标签:jquery function 卡口 标签 点击 添加 click


jquery中给动态生成的标签添加点击事件

一、问题描述

在做项目的过程中,有一个需求,点击按钮,动态添加一行,然后点击删除按钮删除这一行,我首先想到的是就直接绑定点击事件,进行操作既可以了。但是,问题来了,点击删除按钮不起作用,后来发现是因为动态添加的,所以用传统的绑定方式就不起作用了。

二、解决问题

案例截图
在这里插入图片描述

// 点击加号添加一行条件
  let contentHtml = ''
  let currentHeight = 0 //当前div的高度
  let sunIcon = ''
  $('.add').click(function () {
    sunIcon = `<i class="layui-icon layui-icon-subtraction sub"></i> `
    $('.nav1').append(sunIcon)
    $('.nav2').append(sunIcon)
    contentHtml = `<div class="layui-form-item nav">
                <span>条件一</span>
                <div class="layui-inline">
                  <label class="layui-form-label">卡口:</label>
                  <div class="layui-input-inline">
                    <select class="layui-select" id="bayonet" name="bayonet"  lay-search>
                      <option value="">请选择卡口</option>
                      <option value="">卡口A</option>
                      <option value="">卡口B</option>
                      <option value="">卡口C</option>
                      <option value="">卡口D</option>
                      <option value="">卡口E</option>
                      <option value="">卡口F</option>
                      <option value="">卡口G</option>
                    </select>
                  </div>
                </div>
                <div class="layui-inline">
                  <label class="layui-form-label special">最小出现卡口个数:</label>
                  <div class="layui-input-inline">
                    <select class="layui-select" id="bayonetNum" name="bayonetNum" lay-search>
                      <option value="">2</option>
                      <option value="">3</option>
                      <option value="">4</option>
                      <option value="">5</option>
                      <option value="">6</option>
                    </select>
                  </div>
                </div>
                <div class="layui-inline">
                  <label class="layui-form-label">起始时间:</label>
                  <div class="layui-input-inline">
                    <input name="startTime" id="startTime" class="layui-input" placeholder="请输入起始时间" />
                  </div>
                </div>
                <div class="layui-inline">
                  <label class="layui-form-label">截止时间:</label>
                  <div class="layui-input-inline">
                    <input name="endTime" id="endTime" class="layui-input" placeholder="请输入截止时间" />
                  </div>
                </div>
                <i class="layui-icon layui-icon-subtraction sub"></i>  
              </div>`
    //获取当前div高度
    currentHeight = $('.detailContent').outerHeight(true)
    if(currentHeight < 250) {
      $('.left').append(contentHtml);
    } else {
      layer.msg('最多只能添加5个条件', {icon: 2})
    }
    
    layui.use(['form'], function () {
      var form = layui.form;
      form.render()
    })
  })

//这样写不起作用了,这种只针对静态资源,也就是说原本html页面存在的标签
  $('sub').click(function() {
    console.log('ss')
    $(this).parent().remove();
  })

可以通过事件委托解决这个问题

$(document).on('click', '.sub', function() {
    console.log('ss')
    $(this).parent().remove();
  })

三、另外一些方案

不是很好用,不推荐,如果正好有比较合适的需求,可以使用,看的其他博主的博客
方法一:

<body>  
        <!-- 下面是用纯动态方式生成标签 -->  
        <div id="d2">  
            动态生成a标签  
        </div>  
          
        <div id="d3">  
            <input type="button" value="生成a标签" id="btn"/>  
              
        </div>  
    </body>  
    <script>  
        $(function() {  
            ///点击按钮,给d2动态添加标签  
            $('#btn').bind('click', function() {  
                /* 在添加标签的同时给添加的标签绑定点击事件 */  
                $("<li οnclick='show()'>Hello</li>").appendTo("#d2");  
            });  
      
        })  
      
        function show() {  
            alert($(this).text());///这样打印出的是空的,没有任何东西,但是方法是会触发的(不能这样打印自己)  
            alert("哈哈");  
        }  
    </script>

这种方法是在动态拼接时就拼接好js原生的要触发的事件,然后把事件方法定义在script标签中。这种方法可以触发li的点击事件。但是如果要用alert($(this).text())这种打印标签自己本身信息的东西的方法,是没有任何结果显示的。这个即使是静态的标签打印自己也是不会有显示的。

方法二

<body>  
    <!-- 下面是用纯动态方式生成标签 -->  
    <div id="d2">  
        生成a标签  
    </div>  
      
    <div id="d3">  
        <input type="button" value="生成a标签" id="btn"/>  
    </div>  
</body>  
<script>  
    $(function(){  
        $('#btn').bind('click', function(event) {  
            /* 在添加标签的同时给添加的标签绑定点击事件 */  
            $("<li>Hello</li>").appendTo("#d2").bind('click', function() {  
              /* 显示标签的内容 */  
              alert($(this).text());  ///这种方式也可以正常打印出 hello  
            });  
            });  
              
    })  
</script>

这种方式是可以解决上面问题的。虽然它用的也是bind方法,但是注意,它是先有目的标签对象然后才调用的bind方法,所以也是好用的。而且它居然可以正常打印自己的信息,非常厉害。

附上参考链接https://www.cnblogs.com/lst619247/p/8580142.html

标签:jquery,function,卡口,标签,点击,添加,click
来源: https://blog.csdn.net/qq_41880073/article/details/118400539

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有