提交表单并绕过 jQuery 验证 submitHandler

Submit form and bypass jQuery validation submitHandler

考虑以下脚本。验证脚本后,如果他们更改了电子邮件,我希望显示一个对话框提示他们输入密码。如果密码被检查出来,服务器将只更新数据库。

问题是它会导致无限循环,因为对话框按钮会提交表单,而表单又会启动对话框。我意识到如果 $('#password') 不为空我就不会触发对话框,但是,我的实际脚本更复杂,并且 "nice" 以某种方式提交表单并绕过 jQuery验证 submitHandler.

这可能吗?如果是,怎么做?

var validator=$("#main_form").validate({
    rules: {},
    messages: {},
    submitHandler: function(form) {
        if(emailedChanged) {
            $("#dialog-password").dialog("open");
        }
        else {form.submit();}
    }
});

$('#dialog-password').dialog({
    buttons     : [
        {
            text    : 'SAVE',
            click    : function() {
                $('#password').val($(this).find('input').val());
                $('#main_form').submit();                
            }
        },
        {
            text    : 'CANCEL',
            click    : function() {$(this).dialog("close");}
        }
    ]    
});

您可以捕获点击事件并阻止它提交表单(从而阻止 submitHandler 触发)。然后在单击事件的处理程序中,您可以添加所需的功能。

  • 检查电子邮件是否已更改,如果已更改,则显示对话框,如果单击保存按钮,该对话框将依次提交表单。
  • 如果邮箱没改过,直接触发表单的提交事件

    $("#hj").click(function (ev) {
       ev.preventDefault();
       if (emailedChanged) {
          $("#dialog-password").dialog("open");
       } else {
          $("#main_form").submit();
       }
    });
    

fiddle