使用Javascript添加Dom元素后的事件绑定?

 mEmorIes-谨年一_950 发布于 2022-11-09 08:32
挺简单的问题,就是不好描述哈...,不知道能不能理解


    
    

上面只是一个使用js添加一个按钮的例子。页面一开始是有一个按钮的,按钮绑定了一个点击事件。现在通过js再添加一个一样的按钮,很明显,之后手动添加的按钮并没有绑定Click事件,要想这个按钮也有点击事件,我能想到的就是:重新使用bindEvent()方法绑定才行:

 $(".btn").on("click", function() {
        $(".container").append("")
        //为按钮绑定Click方法,同时也为一开始就有的按钮也重新绑定了一次事件,这样会不会对性能有影响?毕竟随着按钮越来越多,要绑定事件的按钮也越多了。
        (function bindEvent() {
        $(".item").click(function() {
            alert("Hello");
        });
    })();
    });

我想问的问题已经在上面的注释中写明。之所以问这个问题是因为最近在做一个下拉刷新,每次下拉就发送一个异步请求,再把结果添加到页面中去,然后都要为新加入的dom重新绑定一次事件,不知道这样会不会对性能有影响?

5 个回答
  • 用事件代理即可。比如你加入的都是button 而且都有一个class为item。
    那么可以把点击事件委托给body:

    $('body').on('click','.item',function(e){
        console.log(this); // this 就是button.item这个dom元素。
        console.log(e); // e 是jq处理好的事件对象,.target 触发源(item中不存在冒泡时就是this) .type 事件类型 
        e.stopPropagation(); // 阻止事件冒泡
        e.preventDefault(); // 阻止默认行为 比如a标签的调整 提交按钮的提交等
        
        // TODO 
    })

    事件代理是更高效的方式,不用给所有需要的都绑定事件,也就是一个处理函数就够了。
    而且 即使是绑定事件之后添加的元素 依然可以触发事件 正好满足你的要求

    2022-11-12 01:46 回答
  • 直接在append的时候加上onclick不行?

    2022-11-12 01:46 回答
  • 一楼讲得比较清楚了,就是字打错了,事件委托和事件冒泡

    2022-11-12 01:46 回答
  • ...脑洞清奇,其实你直接循环下拉事件就好了,每下拉一次刷出一部分内容,这样你就不需要绑定了。

    2022-11-12 01:46 回答
  • 哈哈哈,求点赞啊
    关于这个问题 利用时间委托和事件冒泡就可以解决,你的js时间绑定有问题,稍微修改一下就可以了

    $(".container").on('click','.item',function() {

    alert("Hello");

    });

    2022-11-12 01:46 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有