javascript - 关于jquery事件代理问题
伊谢尔伦
伊谢尔伦 2017-04-11 11:49:31
[JavaScript讨论组]

在高版本jQuery中,去掉了delegate、bind、live等方法,.on()方法提供绑定事件处理的所有功能。查了一下API文档,要使用事件代理的话,on的语法如下例子:

$("#dataTable tbody").on("click", "tr", function(event){
  alert($(this).text());
});

目前做个项目有这样的需求,即
1、会动态的添加DOM元素,但要保留绑定的事件
2、会使用html()方法改变html代码,但要保留绑定的事件

jQuery代理是否使用于这两种情况呢? 我将按钮的父元素进行事件代理,但发现只有动态添加的元素能保留事件,而改变innerhtml后(我测试了复制清空再粘贴相同的html),事件全部没了,而这是硬需求,怎么解决?

将需求等效为以下的简单例子,比如有如下结构


    

我用body代理不成功,而用离button更近的父元素代理能成功。但问题是我需要改变body的innerhtml,如果用wrap代理的话改变innerhtml后事件就失效了。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
阿神

在body上可以的啊,是不是你写错了,或者可以委托在文档上

<script>
        $(function(){
            $("input").click(function(){
                $("body").append("<button>按钮</button>")
            })
            $(document).on("click","button",function(){
                alert("我可以生效")
            })
        })
    </script>
迷茫
$(document).on('click','你动态添加的class',function(){
    //内部实现代码
}

document 可以换成你动态添加html的父元素,一直存在的
伊谢尔伦

on是绝对可以的,前提是你真的绑定在了父元素上,我敢跟你赌一根辣条!!!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号