如何让jQuery在尚未创建的对象上工作?

时间:2012-08-30 13:36:45

标签: javascript jquery

  

可能重复:
  Binding dynamically created elements in jQuery

有没有办法可以更改以下代码:

$('#city')
        .focus(function () {
            $('option[value="99"]', this).remove();
            store.setItem($(this).attr('id'), $(this).val());
        })
        .change(function () {
            store.setItem($(this).attr('id'), $(this).val());
            $(this).attr("title", $("option:selected", this).attr("title"));
            $('#detailData').html("");
        });

因此只要它们具有“update-title”类,即使它们尚未创建,它也适用于选择。例如:

<select class="update-title"> 

我看到一些使用live的实现,但是有人说使用它并不好。这样做也有很多开销。在我确定使用document.ready()创建选择后,添加代码会不会更好?

4 个答案:

答案 0 :(得分:6)

看看on。这是live的替代品,可以为您执行此操作。

答案 1 :(得分:1)

您需要on

$(document).on('change', '.update-title', function(event){

    // your business here

});

这样document会监听在.update-title元素上触发的任何事件,无论是否在文档加载时它们都在那里。

答案 2 :(得分:1)

最好的方法是使用委托 - 所以你将事件处理程序绑定到加载dom时存在的父元素 - 它将依次侦听给定元素上的事件并处理它们

使用jQuery 1.7 +

$('body').on('click','.update-title', function(){ // <-- all click events will now bubble
// up to body - and it will listen for events from .update-title
    // code here
});

最佳做法是将事件处理程序绑定到dom load上最近的父级,因为您可以看到绑定到正文/文档的开销 - 所有单击事件都会冒泡 - 如果只绑定到父元素那么会发生在那个元素里面会起泡。

答案 3 :(得分:0)

是的,如果没有在ajax中加载html,你确定已经使用document.ready()创建了选择