如何从表单中删除 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 验证?的主要内容,如果未能解决你的问题,请参考以下文章