【问题标题】:Submit form and bypass jQuery validation submitHandler提交表单并绕过 jQuery 验证 submitHandler
【发布时间】:2015-01-04 17:47:11
【问题描述】:

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

问题在于它会导致无限循环,因为对话框按钮提交表单,而表单又会启动对话框。我意识到如果$('#password') 不为空,我就无法触发对话框,但是,我的实际脚本更复杂,以某种方式提交表单并绕过 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 是决定表单是否/何时有效的错误位置,因为submithandler 仅在点击后触发> 该表单已被视为有效。

标签: javascript jquery forms jquery-validate


【解决方案1】:

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

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

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

fiddle

【讨论】:

  • 我不明白第一个解决方案,它似乎不起作用(jsfiddle.net/ku970umj/1),但是,你的第二个似乎是要走的路。我会测试和评论。谢谢
  • 没有两种解决方案,只有一种(两步)。
  • 啊,这就解释了!此解决方案是否会首先验证,然后启动对话框?在我看来,它可能会以相反的顺序进行。
  • 理论上应该按你说的做。首先,启动对话框,然后对话框提交表单。
  • @user1032531 我一直在阅读文档并检查您的小提琴,而 class="cancel" 所做的是跳过验证(我们不是在寻找)。这个想法怎么样? fiddle 。如果它适合你,我可以更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多