我是靠谱客的博主 舒服书包,最近开发中收集的这篇文章主要介绍前端问题记录篇(三):jQ事件委托问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

当需要给动态生成的元素绑定事件时,需要考虑事件委托
原因
绑定事件时,会搜索当前解析到的dom元素,将符合条件的dom元素绑定上事件
但事件绑定如果先于元素新增的执行,就没有匹配到新增元素,新增的元素便不会被绑定到事件

使用:父级元素.on(事件名, 需执行事件的子元素, 处理函数)

例子
原本的页面:
在这里插入图片描述
dom结构:

<button class="add">+</button>
<div class="list">
    <div class="item">
        <div class="img">
            <img src="./img/2.png" alt="">
        </div>
        <h2>ccy</h2>
        <p>吃饭睡觉看综艺,学习听歌写代码</p>
    </div>
</div>

点击add之后,出现的弹窗是这样的:
在这里插入图片描述
问题1:

背景:当用户点击add按钮时,才加载一次弹窗,即,弹窗也是动态新增的

功能:出现弹窗后,输入文字,点击ok按钮,生成新的div.item,动态插入到div.list中

分析:ok按钮是动态新增的,只有用户点击add按钮时才新增,需使用事件委托,将ok的点击事件委托给body
 $('body').on('click', '.ok', function(){
    var name = $('.name').val(),
        url = $('.url').val(),
        des = $('.des').val();
    $('.hide').add($('.alert')).fadeOut();
    $('.list').append('<div class="item">
                        <div class="img">
                            <img src="' + url + '" alt="">
                        </div>
                        <h2>' + name + '</h2>
                        <p>' + des + '</p>
                    </div>');
});

效果:
在这里插入图片描述
添加了一个人物介绍,右侧也能清晰地看到dom结构多了一个item
如果没有用事件委托,就无法新增:

问题2:

背景:原定的设计是,每个人物栏(item)都有人物介绍(des)的部分,这个介绍的部分一开始是隐藏的,当点击人物栏时才显示
 
功能:动态生成一个item,给item绑定事件,点击时显示描述
 
分析:上面说到,弹窗、弹窗显示的按钮都是动态新增的,用户输入描述,生成新人物栏,该人物介绍就也是动态新增的,需要将item的点击事件委托到父元素div.list上
$('.list').on('click','.item', function(){
    $(this).find('p').slideToggle();
}) 

效果:
在这里插入图片描述
外加一句:前面的add按钮,点击时有个outline,像border又不是border的outline,是选中时默认的效果,把这个效果置none,就不会再出现
在这里插入图片描述
效果:对比第一张动图,效果就很明显了
在这里插入图片描述

最后

以上就是舒服书包为你收集整理的前端问题记录篇(三):jQ事件委托问题的全部内容,希望文章能够帮你解决前端问题记录篇(三):jQ事件委托问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部