我有一些代码如下:
jQuery("[name='myform']").live('submit', function() {
$(this).ajaxForm({
target: '#someform',
beforeSerialize: function(form, options) {
alert("BeforeSerialize happening.");
jQuery('form[name=myform] input[type=submit]').attr('disabled', 'disabled').attr("value", "<%= t('labels.please_wait') %>");
return true;
}
else {
return false;
}
}
return false;
},
success: function() {
jQuery('#form_quotes_highlights_part').fadeIn('slow');
},
complete: function() {
jQuery("#wizard").expose().close();
}
});
});
live()绑定似乎工作正常,但是ajaxForm根本不起作用。如果我这样做:
$(document).ready(function() {
/* ajax form stuff here */
});
看起来效果很好。唯一的问题是,当响应从服务器返回时,javascript处理程序没有正确地附加到DOM,因此使用live()。无论哪种方式,beforeSerialize永远不会以我正在处理我的live()处理程序的方式调用,所以我没有ajaxForm,而是提交完整页面。
清理它的最佳方法是什么?
答案 0 :(得分:1)
我从未使用ajaxForm
插件,但查看其documentation,看起来只需设置表单就可以调用ajaxForm
,它不会实际上提交表单。因此,当调用绑定到表单的submit函数的函数时,表单已经被提交,因此通过ajaxForm
将表单设置为AJAX表单为时已晚。
如果我理解正确,页面加载时页面上不存在myform
表单;相反,它在某些时候通过AJAX调用插入到页面中。该AJAX调用的success
回调也是您应该调用ajaxForm
的地方,以便提前准备用户提交表单的时间。 e.g:
$.get('/get_my_form', function(data) {
$('form[name="myform"]').html(data).ajaxForm({
target: '#someform',
beforeSerialize: function(form, options) {
$('form[name=myform] input[type=submit]').attr('disabled', 'disabled').attr("value", "<%= t('labels.please_wait') %>");
return false;
},
success: function() {
jQuery('#form_quotes_highlights_part').fadeIn('slow');
},
complete: function() {
jQuery("#wizard").expose().close();
}
});
});