0

可能重复:
在 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("");
        });

因此,即使它们尚未创建,只要它们具有“更新标题”类,它就适用于选择。例如:

<select class="update-title"> 

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

4

4 回答 4

6

看看on。这是一个替代品,live它会为你做这件事。

于 2012-08-30T13:38:17.627 回答
1

你需要on

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

    // your business here

});

通过这种方式,document监听.update-title元素上触发的任何事件,无论它们在文档加载时是否存在。

于 2012-08-30T13:40:55.170 回答
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 加载时将事件处理程序绑定到最近的父级,因为您可以看到绑定到正文/文档的开销 - 所有单击事件都会冒泡 - 如果您仅绑定到父元素,则仅绑定到该元素内的父元素会冒泡。

于 2012-08-30T13:46:36.900 回答
0

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

于 2012-08-30T13:39:46.180 回答