【问题标题】:How do I remove jQuery validation from a form?如何从表单中删除 jQuery 验证?
【发布时间】:2010-09-26 16:04:35
【问题描述】:

我正在使用 jQuery 验证插件来验证表单,如果单击某个链接,我想删除验证并提交表单。

我正在使用 jQuery('form#listing').submit() 之类的 javascript 提交表单,因此我必须使用 javascript 删除验证规则/函数。

问题是我不知道该怎么做。我尝试过jQuery('form#listing').validate({});jQuery('form#listing').validate = null 之类的方法,但没有成功。

【问题讨论】:

    标签: javascript jquery validation


    【解决方案1】:

    触发 DOM 提交方法跳过验证:

    $("#listing")[0].submit();
    

    【讨论】:

    • 这是一个很棒的提示。谢谢。
    • 确实,这是一个很好的提示,但它不能回答问题。
    • 这个提示不起作用,而不是删除它提交表单的 jquery 验证
    • 是 [0] 表单中的数组元素吗?我可以使用 [0,1,3] 来禁用这些节点吗?
    【解决方案2】:

    您可以使用unbind删除节点事件:

    jQuery('form#listing').unbind('submit'); // remove all submit handlers of the form
    

    您可能正在寻找的是验证插件也可以从提交事件中取消分配自己:

    jQuery('form#listing').validate({
       onsubmit : false
    });
    

    对于这两种情况,您应该可以致电.submit() 提交表单:

    jQuery('form#listing').unbind('submit').submit();
    

    【讨论】:

    • 只有 unbind 方法对我有用。使用 jQuery 1.3.2 和验证 1.5.5
    【解决方案3】:
    var form = $('#my_form_id').get(0);
    $.removeData(form,'validator');
    

    确实有效。

    【讨论】:

    • 在解决这个问题后,上面需要 $(form).removeData('validator');
    • 在这个命令之后我再次调用 $("form").validate(GetSettings());在 GetSettings 中,我只返回 {...,groups: GetValidationGroups(),...} 这允许我动态更改验证组。
    【解决方案4】:

    您可以向元素(按钮、输入)添加取消的 css 类,以便它跳过验证

    【讨论】:

    • 我正在使用 javascript 提交表单,所以很遗憾这不起作用。
    • 幸运的是我没有做任何复杂的事情,所以这对我有用。谢谢。
    • 也可以在提交元素上使用html5属性formnovalidate
    【解决方案5】:

    你也可以这样使用公共的“规则”功能:

    $('input, select, textarea').each(function() {
        $(this).rules('remove');
    });
    

    这就是我正在使用的;)

    【讨论】:

    • 这对我来说效果很好。我需要删除已经应用的规则,然后应用较小的规则子集。就我而言,我有一个提交按钮(强制执行更多必填字段)和一个保存按钮(仅强制执行数据格式)。提交后,我得到各种必填字段验证错误,如果没有数据格式错误,我可以保存。如果保存时出现一些验证错误,不幸的是,它也会显示必填字段验证错误,但这对我来说已经足够接近了。我在这里尝试了其他一些示例来摆脱这种情况,但没有运气。
    • 是的。我和@KirkLiemohn处于相同的场景:多个提交按钮,服务器端代码需要知道哪个被按下。致电.submit() 提交表单会删除该数据,而您的方式是唯一对我有用的方式!谢谢!
    【解决方案6】:

    如果您想打开/关闭表单验证(例如付款类型的不同验证...),我发现没有其他方法有用。

    我必须做的(这不是一个很好的解决方案,但它确实有效)

    设置验证:

    jQuery('#form').validate();
    

    禁用表单:

    jQuery('#form').validate().currentForm = '';
    

    再次启用表单:

    jQuery('#form').validate().currentForm = jQuery('#form')[0];
    

    【讨论】:

    • 谢谢,今天这对我有帮助。我有一个使用 ajax 然后清除所有输入 的表单,以便可以再次使用它 - 这触发了验证器抛出错误消息,就好像用户已经删除了所有必需的信息一样。我在清除表单之前在提交时使用它以避免向用户发送“此字段是必需的”消息:)
    • 在尝试 6 种其他解决方案后有效。为什么 jQ Validate 如此难以预测?
    【解决方案7】:

    这似乎对我有用:

    var form = $('#my_form_id').get(0);
    $(form).removeData('validate');
    

    【讨论】:

    • 嗯。现在我正在使用上面 Jorn 提到的方法。当我想绕过验证时,我可以使用它:
       bypassValidator = function(){ $("#btn-submit").bind('click', function(){ $('#myForm')[0] 。提交();																										  		}); } 
    • 您的方法为我解决了一个稍微不同的问题。我通过 Ajax 以不同的形式动态加载,如果字段名称相同,则现有验证将适用于它,除非我首先运行上面的代码。
    【解决方案8】:
    $("#formName").validate().settings.ignore = "*";
    

    参考:https://github.com/jzaefferer/jquery-validation/issues/725

    【讨论】:

      【解决方案9】:

      我最近升级到了 Jörn 的验证器脚本 1.5.5,并且 removeValidator 函数已被弃用。

      
      ...
      jQuery.extend(
                jQuery.fn, 
                {
                removeValidator: function(){
                    this.unbind();
                    jQuery.removeData(this[0], 'validator'); 
                }
      ...
      

      【讨论】:

        【解决方案10】:

        对于表单的所有标签输入:

        $('#myform').validate().settings.ignore = '.valid';
        $('input').addClass('valid');
        

        它对我有用。

        【讨论】:

          猜你喜欢
          • 2015-08-22
          • 1970-01-01
          • 2018-04-19
          • 1970-01-01
          • 2014-05-30
          • 1970-01-01
          • 1970-01-01
          • 2011-12-25
          • 1970-01-01
          相关资源
          最近更新 更多