【发布时间】:2012-10-21 18:12:30
【问题描述】:
我正在使用 Ajax 验证 Zend 表单并提出了以下建议:
$('#some-dialog-i-have form').live('submit', function(e) {
e.preventDefault();
MyClass.Form.Validate($(this), function() {
// I wish to submit the form from this callback function
$(this).trigger('submit');
});
});
MyClass.Form.Validate 获取表单并执行 XHR 请求以检查表单是否有效。
我的问题是,如果表单有效,我希望继续提交,但如果不是,则停止一切。从这个处理程序中触发提交显然会导致递归问题;最好的方法是什么?
Form: {
Validate: function(form, onSuccess) {
$.ajax({
type: 'POST',
dataType: 'json',
url: '/ajax/form/validate',
data: form.serialize() + '&f=' + form.data('id')
}).done(function(errorMessages) {
if(errorMessages.count > 0) {
// Snip (display errors)
return false;
}
// Callback
onSuccess();
});
}
}
- 我已经完成了关于 stopPropagation 的操作,但这对实时处理程序没有影响
- 我知道 live() 处理程序已被弃用,我暂时忽略了更改它
- 我曾考虑过简单地通过 Ajax 发布表单,但不确定是否要这样做
可能是一个简单的解决方案,但我今天的思路不正确。
谢谢。
【问题讨论】:
-
解释应该是什么顺序。看来您不希望在 ajax 完成之前提交表单(并且没有错误),但不是很清楚
-
你可以让ajax同步运行
-
你为什么要尝试提交表单两次?提交处理程序中的
$(this).trigger('submit');也是递归的
标签: jquery ajax zend-framework validation