【发布时间】:2011-09-28 06:03:59
【问题描述】:
我想使用 jQuery 的 .delegate() 方法,因为我读过它的性能比 .live() 好得多。
但是,当我使用 .delegate() 时,它不会将事件绑定到 ajax 加载的内容。
谁能帮我让 .delegate() 工作?还是我坚持使用较慢的 .live() 加载 ajax 内容?
var randomObject = {
'config' : {
'form' : '#someform',
'select' : '#someselect',
'container' : '#pagecontainer'
},
'init' : function() {
randomObject.formEffects();
randomObject.ajaxFormSubmit();
},
'formEffects' : function() {
////////////// DELEGATE WON'T WORK on AJAX loaded content!
//$('randomObject.config.form).delegate('select', 'change', function() {
$(randomObject.config.select).live('change', function() {
$(this).closest('form').trigger('submit');
});
},
'ajaxFormSubmit' : function($form) {
$(randomObject.config.container).load($form.attr('action')+' '+randomObject.config.container, $form.data('form_values'), function(response, status, xhr){
alert('updated!');
});
},
};
【问题讨论】:
-
form、select和container是什么关系?您的 HTML 看起来如何?如果form因为更新过程而被替换,那么绑定一个事件处理程序当然是行不通的。 -
在您注释掉的代码中,您有一个奇怪的单引号。
$('randomObject.config.form)也许这起了作用? -
单引号是我写问题时的拼写错误,而不是在我运行的代码中。 HTML 是。正如 TommyB 建议的那样,修复方法是将委托绑定到外部 div(以前我一直将它绑定到 #ajax-replaced-content,因此它只能在进行 ajax 调用并替换 div 之前工作)。
标签: ajax jquery delegation