附加内容后jQuery点击事件

Pav*_*Pav 24 jquery

想知道为什么下面的例子不起作用?

<a id="load_list" href="#">Load the list</a>

<ul></ul>

<script type="text/javascript">
$(document).ready(function() {
    $('#load_list').click(function() {
        $('ul').append('<li><a href="#">Click here</a></li>');
        return false;
    });
    $('ul li a').click(function() {
        alert('Thank you for clicking');
        return false;
    });
});
</script>
Run Code Online (Sandbox Code Playgroud)

amo*_*era 64

因为在定义click处理程序时,您要追加的元素不存在,所以它们是动态创建的.要解决这个问题,您可以使用jQuery中的delegate()方法.

$('ul').delegate('a','click',function() {
    // your code here ...
});
Run Code Online (Sandbox Code Playgroud)

在线示例: http ://jsfiddle.net/J5QJ9/

  • 一些进一步的信息(我为狡猾的格式化道歉):旧:`$("#Item1").click(function(e){`New:`$(document).delegate("#Item1","click" ,function(e){`Even Newer:`$(document).on("click","#Item",function(e){` (8认同)

小智 9

从jQuery 1.7开始,您可以使用.on()处理程序将新创建的元素绑定到"click"事件:

<script type="text/javascript">
$(document).ready(function() {
    $('#load_list').click(function() {
        $('ul').append('<li><a href="#">Click here</a></li>').on('click', 'ul li a', function () {
            alert('thank you for clicking');
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

(这是原始示例).


小智 7

$(document).on('click','ul li a', function(){
      // Content Code
});
Run Code Online (Sandbox Code Playgroud)