jQuery点击处理函数不会触发DOM加载后添加的元素

时间:2014-01-17 18:38:20

标签: jquery

我相信我可以用.live做到这一点,但该方法已被弃用。这是问题所在:

我有一个点击处理函数,应该触发任何带有“myClickEl”类的元素。这适用于加载时文档中存在的“myClickEl”元素。但是,如果我在加载DOM后添加了myClickEl元素,则不会触发单击处理程序。

这是代码。我尝试了以下两种方法:

选项1:

    jQuery('.myClickEl').on('click', function(){
        var formText='This is some text to paste';
        jQuery(this).parent().next('textarea').val('');
        jQuery(this).parent().next('textarea').val(formText);
    });

选项2:

    jQuery('.myClickEl').click(function(){
        var formText='This is some text to paste';
        jQuery(this).parent().next('textarea').val('');
        jQuery(this).parent().next('textarea').val(formText);
    });

2 个答案:

答案 0 :(得分:9)

您需要使用Event delegation

jQuery(document).on('click','.myClickEl', function() { 
    var formText='This is some text to paste';
    jQuery(this).parent().next('textarea').val('');
    jQuery(this).parent().next('textarea').val(formText);
});

答案 1 :(得分:1)

来自http://api.jquery.com/on/

您对on:

的使用感兴趣
.on( events [, selector ] [, data ], handler(eventObject) )

JQuery提供的示例是

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

你应该做类似的事情,首先选择一个在页面上是静态的元素,然后选择应该使用click事件的选择器。

最佳做法是尽可能具体,因此请尝试选择合理的第一个目标,以便JS不必检查每个点击事件,看它是否应该运行。