代码之家  ›  专栏  ›  技术社区  ›  Ted

jQuery验证插件:禁用指定提交按钮的验证

  •  154
  • Ted  · 技术社区  · 17 年前

    我有一个包含多个字段的表单,我正在使用Jrn Zaeffer优秀的jQuery验证插件对其进行验证(其中一些添加了用于自定义验证的方法)。如何使用指定的提交控件规避验证(换句话说,使用某些提交输入启动验证,但不使用其他输入启动验证)?这类似于带有标准ASP.NET验证程序控件的ValidationGroup。

    我的情况:

    这家商店在一家商店里买卖房子样品 http://jquery.bassistance.de/validate/demo/multipart/

    以下是我现在得到的立即适用脚本的缩短版本:

    var container = $("#<%= Form.ClientID %> div.validationSuggestion");
    
    $('#<%= Form.ClientID %>').validate({          
        errorContainer: container,
        errorLabelContainer: $("ul",container),
        rules: {
            <%= YesNo.UniqueID %>: { required: true },
            <%= ShortText.UniqueID %>: { required: true } // etc.
    
        },
        messages: {
            <%= YesNo.UniqueID %>: 'A message.',
            <%= ShortText.UniqueID %>: 'Another message.' // etc.
        },
        highlight: function(element, errorClass) {
            $(element).addClass(errorClass);
            $(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
            $(element.form).find("label[for=" + element.id + "]").removeClass("valid");
        },
        unhighlight: function(element, errorClass) {
            $(element).removeClass(errorClass);
            $(element.form).find("label[for=" + element.id + "]").removeClass(errorClass);
            $(element.form).find("label[for=" + element.id + "]").addClass("valid");
        },
        wrapper: 'li'
    }); 
    
    11 回复  |  直到 10 年前
        1
  •  292
  •   user489998    9 年前

    cancel

    例如

    <input class="cancel" type="submit" value="Save" />
    

    请参见此功能的jQuery验证程序文档: Skipping validation on submit


    编辑 :

    上述技术已被弃用并替换为 formnovalidate 属性

    <input formnovalidate="formnovalidate" type="submit" value="Save" />
    
        2
  •  109
  •   lepe    16 年前

    $("form").validate().cancelSubmit = true;
    

    在按钮的单击事件上(例如)。

        3
  •  21
  •   Daniel Garcia    10 年前

    $("form").validate().settings.ignore = "*";
    

    要重新启用它,我们只需设置默认值:

    $("form").validate().settings.ignore = ":hidden";
    

    资料来源: https://github.com/jzaefferer/jquery-validation/issues/725#issuecomment-17601443

        4
  •  17
  •   Jeffin Alex    11 年前

    将formnovalidate属性添加到输入

        <input type="submit" name="go" value="Submit"> 
        <input type="submit" formnovalidate name="cancel" value="Cancel"> 
    

    现在不推荐添加class=“cancel”

    请参阅文档,以跳过此服务器上提交时的验证 link

        5
  •  10
  •   BrokeMyLegBiking    16 年前

    你可以使用 提交人:错 选项(参见 documentation )连接验证时,在提交表单时不会验证。然后在asp:button中添加OnClientClick=$(“#aspnetForm”).valid();显式检查表单是否有效。

    您可以将其称为选择加入模型,而不是上面描述的选择退出模型。

    注意,我还在ASP.NET WebForms中使用jquery验证。有一些问题需要解决,但一旦你解决了,用户体验非常好。

        6
  •  3
  •   Simon_Weaver    12 年前

    (延期) @lepe @redsquare 回答 ASP.NET MVC + jquery.validate.unobtrusive.js )


    jquery validation plugin .cancel 在“提交”按钮上初始化以完全绕过验证(如已接受的答案所示)。

     To skip validation while still using a submit-button, add a class="cancel" to that input.
    
      <input type="submit" name="submit" value="Submit"/>
      <input type="submit" class="cancel" name="cancel" value="Cancel"/>
    

    (不要把这和 type='reset' 这是完全不同的)

    不幸的是 jquery.validation.unobtrusive.js 验证处理(ASP.NET MVC)代码有点搞砸了 jquery.validate plugin's default behavior .

    这就是我想让你 取消

        // restore behavior of .cancel from jquery validate to allow submit button 
        // to automatically bypass all jquery validation
        $(document).on('click', 'input[type=image].cancel,input[type=submit].cancel', function (evt)
        {
            // find parent form, cancel validation and submit it
            // cancelSubmit just prevents jQuery validation from kicking in
            $(this).closest('form').data("validator").cancelSubmit = true;
            $(this).closest('form').submit();
            return false;
        });
    

    注意:如果第一次尝试时,这似乎不起作用-请确保您没有往返到服务器并看到服务器生成的页面出现错误。您需要通过其他方式绕过服务器端的验证—这只允许在客户端提交表单而不会出现错误(另一种方法是添加 .ignore

    (注意:您可能需要添加 button (如果使用按钮提交,则转到选择器)

        7
  •  2
  •   Davide Ciarmiello    8 年前
    $("form").validate().settings.ignore = "*";
    

    $("form").validate().cancelSubmit = true;
    

    var btn = form.children('input.cancel.fakeSubmitFormButton');
    if (btn.length === 0) {
        btn = $('<input name="FakeCancelSubmitButton" class="cancel fakeSubmitFormButton hide" type="submit" formnovalidate value="FakeCancelSubmitButton" />');
        form.append(btn);
    }
    btn.click();
    

    现在正确跳过验证:)

        8
  •  1
  •   bradlis7    11 年前

    这个问题由来已久,但我发现另一种解决方法是使用 $('#formId')[0].submit()

    <input type='button' value='SubmitWithoutValidation' onclick='$(this).closest('form')[0].submit()'/>
    

    另外,确保你没有任何 input submit .

        9
  •  1
  •   Scott Mayers    9 年前

    我发现最灵活的方法是使用JQuery:

    event.preventDefault():
    

    例如,如果我不想提交,而是想重定向,我可以:

    $("#redirectButton").click(function( event ) {
        event.preventDefault();
        window.location.href='http://www.skip-submit.com';
    });
    

    或者,我可以将数据发送到其他端点(例如,如果我想更改操作):

    $("#saveButton").click(function( event ) {
        event.preventDefault();
        var postData = $('#myForm').serialize();
        var jqxhr = $.post('http://www.another-end-point.com', postData ,function() {
        }).done(function() {
            alert("Data sent!");
        }).fail(function(jqXHR, textStatus, errorThrown) {
            alert("Ooops, we have an error");
        })
    

        10
  •  1
  •   Bugfixer    9 年前

    $('.save_exist').on('click', function (event) {
                $('#MyformID').removeData('validator');
                $('.form-control').removeClass('error');
                $('.form-control').removeClass('required');                
                $("#loanApplication").validate().cancelSubmit = true;
                $('#loanApplication').submit();
                event.preventDefault();
    });
    
        11
  •  1
  •   user3024034    5 年前
    <button type="submit" formnovalidate="formnovalidate">submit</button>
    

    也在工作

        12
  •  0
  •   Lucy    7 年前

    这是最简单的版本,希望对大家有所帮助,

    $('#cancel-button').click(function() {
        var $form = $(this).closest('form');
        $form.find('*[data-validation]').attr('data-validation', null);
        $form.get(0).submit();
    });