怎样处理jQuery动态添加元素时无法触发绑定事件

 我来答
网海1书生
科技发烧友

2018-04-29 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26228

向TA提问 私信TA
展开全部
这个要用到“事件委托”,就是把动态添加的元素的事件委托给它的父元素(非动态的)去处理,这样的话不管其子元素如果动态添加,都能捕捉其事件。具体你自己百度“事件委托”或“事件代理”
匿名用户
2019-12-06
展开全部
<div class="list"></div>

$(function () {

    console.log('start...')
    // 用setTime模拟ajax数据请求(都是异步的)
    setTimeout(function () {
        $('.list').append(`<div class="item">1</div>`);
        console.log('最后才输出');
    }, 1000)

    console.log($('.item')); // length: 0
    $('.item').click(function () {
        console.log('....');
    });

    console.log('end....');

    // js在运行时是从上往下执行的,碰到异步操作会先跳过,先执行下面的同步代码

    // 现在分析下上面的代码
    // 1. console.log('start...') // 同步,执行并输出(start...)

    // 2. 用setTimeout模拟ajax数据返回,异步操作,先不执行。。。先执行下一步
        // 可以理解成这个操作先放到外面排队着

    // 3. console.log($('.item')) ,我们先输出$('.item'),发现jquery的元素节点长度为0.。。。也就是没找到

    // 4. $('.item').click() // 这个其实是两个步骤
        // 1.先执行$('.item') ,发现这是一个同步操作,好,我们去找元素吧。。。嗯,没找到
        // 2.click() ,嗯,异步的,丢到外面排队着
    // 5.  console.log('end....'); // 嗯,同步的执行

    // 6. 同步的执行完了,外面排队的可以执行了,

    // 7. setTimeout()执行,向div.list添加子节点 div.item

    // 8. $('.item')去触发事件,嗯,什么鬼 $('.item')空的,那触发不了了

    // 问题解决(将item的事件绑定到list,这样当进行$('.list)是有值的)
    $('.list').on('click', '.item', function () {
        console.log('找到了')
    })
})

有什么不对的可以指出下

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式