2012-10-21 63 views
3

我验证与阿贾克斯Zend的形式,并且已经提出了这一点:来自同一事件中触发jQuery的事件处理程序

$('#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已经,但是这将对现场处理程序没有任何影响
  • 我知道现场()处理过时了,我忽视了改变的时刻
  • 我想过干脆通过Ajax发帖的形式,但不知道如果我想这样做,这样

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

谢谢。

+0

问题在哪里? – StaticVariable

+0

问题在哪里? – StaticVariable

+0

问题在哪里? – StaticVariable

回答

1

想到的一件事就是有一个变量,表明表单是否是Ajax检查的结果。

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

请记住,如果某人禁用JS或机器人尝试直接发布到服务器并跳过验证步骤,则表单仍应在服务器上进行验证。

希望有所帮助。

+0

谢谢,知道这将是一个简单的解决方案! – James

相关问题