如何从表单中删除 jQuery 验证?

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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');

它对我有用。

【讨论】:

以上是关于如何从表单中删除 jQuery 验证?的主要内容,如果未能解决你的问题,请参考以下文章

jquery:如何在提交之前从表单中删除空白字段?

如何从页面添加、删除或交换 jQuery 验证规则?

简单的jquery表单验证+添加+删除+全选/反选

jQuery Validate:在提交之前验证后删除元素?

如何从表单结果中删除 isNaN?

删除以下 jQuery 点击功能