从同一事件处理程序中触发jquery事件

时间:2012-10-21 18:12:31

标签: jquery ajax zend-framework validation

我正在使用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发布表单,但不确定我是否想这样做

可能是一个简单的解决方案,但我的头脑今天并不在正确的位置。

感谢。

1 个答案:

答案 0 :(得分:1)

我想到的一件事就是有一个变量来表明该表单是否因Ajax检查而有效。

如果标志为false,则运行Ajax验证。一旦Ajax验证返回为有效,将标志设置为true,然后当触发提交处理程序时,它会看到该标志并绕过检查并直接提交表单。

请记住,在提交时仍应在服务器上验证表单,以防有人禁用JS或机器人尝试直接发布到服务器并跳过验证步骤。

希望有所帮助。