有没有办法可以更改以下代码:
$('#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()创建选择后,添加代码会不会更好?
答案 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()创建了选择