微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jquery – “on”不绑定到动态添加的元素

我的 HTML
<div>    
    <span  class="more-available" data-completeMessage="This is the complete message you see after clicking more">Hello</span>​
</div>

我动态地在末尾添加一个标记,然后想要将一个点击处理程序附加到锚标记.所以我这样做

$(document).ready(function() {

   //Attach future proof click event to an anchor tag
   $('a.more').on('click',function() {
      var $parent = $(this).parent();
      $parent.text($parent.data('completemessage'));
   });

   //Add the anchor tag
   $('span.more-available').append($('<a class="more">...more</a>'));
});;​

这不起作用.如果我用“live”替换“on”就行了. (但是现场折旧)

我知道我能做到这一点

$(document).ready(function() {

    $('div').on('click','a.more',function() {
        var $parent = $(this).parent();
        $parent.text($parent.data('completemessage'));
    });

    $('span.more-available').append($('<a class="more">...more</a>'));
});;​

它有效,但我的问题是……

假设“on”提供了live的所有功能,我错了吗? “on”不会绑定到未来的元素吗?这是正确的行为,还是我做错了什么.

小提琴:http://jsfiddle.net/arishlabroo/pRBke/5/

解决方法

on()只是一个允许目标委派的绑定器.它更像是delegate()的替代品而不是live().

$( ‘富’)生活( ‘点击’,FN);本质上是$(document).on(‘click’,’foo’,fn);

考虑到这一点,您只需将click事件绑定到常量父包装器并委托给您的目标,如下所示:

$('span.more-available').on('click',function(){
    var $parent = $(this).parent();
    $parent.text($parent.data('completemessage'));
});

原文地址:https://www.jb51.cc/jquery/176362.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐