Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery validate忽略某些验证规则_Jquery_Jquery Validate - Fatal编程技术网

使用jQuery validate忽略某些验证规则

使用jQuery validate忽略某些验证规则,jquery,jquery-validate,Jquery,Jquery Validate,我正在使用jQuery验证插件对我的表单进行自定义验证。对于一种特定类型的表单,用户可以选择提交表单,也可以不提交而保存表单。我能够使用$('form.validate').validate().cancelSubmit=true禁止在onClick处理程序中对save按钮进行验证,这样就很好了 但是,编写的一个自定义验证强制要求用户必须输入合法字符(即强制要求您使用有效的ascii字符)。我想继续执行ascii验证,因为如果我不这样做,人们就可以将坏数据保存到数据库中(这会导致我们正在运行的集

我正在使用jQuery验证插件对我的表单进行自定义验证。对于一种特定类型的表单,用户可以选择提交表单,也可以不提交而保存表单。我能够使用
$('form.validate').validate().cancelSubmit=true
禁止在onClick处理程序中对save按钮进行验证,这样就很好了

但是,编写的一个自定义验证强制要求用户必须输入合法字符(即强制要求您使用有效的ascii字符)。我想继续执行ascii验证,因为如果我不这样做,人们就可以将坏数据保存到数据库中(这会导致我们正在运行的集成的混乱)

基本上,我想强制执行所有规则,除了必需的:true。我发现,在设置窗体
$('form.validate').validate({ignore:“.required”})上的验证时,可以使用ignore选项但这似乎只在您最初设置验证时起作用。当我尝试在用户单击按钮时执行此操作时,它似乎什么也不做

我看过一些关于类似事情的帖子,但通常与忽略隐藏字段有关。是否有人知道我需要使用正确的语法/方法在单击按钮时忽略所需的规则?任何帮助都将不胜感激。

您可以动态使用。在“保存”按钮上显示类似的内容

$('#save').click(function () {
    $('#myform').find('.myclass').each(function () {
        $(this).rules('remove', 'required');
    });
    // your code to save form
});
演示:

重要注意事项:,“仅操作通过规则选项或通过
规则('add')
指定的规则”,换句话说,这是


而就在提交之前

$('#submit').click(function (e) {
    e.preventDefault();
    $('#myform').find('input').each(function () {
        $(this).rules('add', 'required');
    });
    $('#myform').submit();
});

演示:

您可以在所需规则中使用三元运算符来分析元素是否在html中声明了内嵌类“ignore”

样品波纹管

HTML

<div class="row">
    <div class="input-field">
        <input id="userName" name="userName" type="text" class="validate ignore" maxLength="10">
         <label for="userName" class="required">Name</label>    
     </div>   
</div> 
CSS

    $('#userName').rules("add", {
        required: $('#userName').hasClass('ignore')? false: true,
        messages: {
            required: "This field is required!",
        }
    });  
.required:before {
    content: "*";
    color: red;
    position: absolute;
    margin-left: -13px;
    font-weight: normal;
    font-size: 23px;
}
在保存之前,迭代所有项目,并将ignore类添加到您想要绕过的项目中。删除要验证的类上的所有ignore类

在提交之前,迭代所有项目,并将ignore类删除为您希望验证的类


旁注:请遵守标签上的class=“required”。这将在所有具有该类的字段旁边添加一个红色的星号,这是通过提供的css部分实现的

有一些方法可以用来动态更改规则。您必须显示您的HTML和jQuery代码,使用JSFIDLE演示会更好。谢谢,Sparky!事实上,我已经开始寻找一个与你类似的答案。我试图循环遍历每个表单元素并删除所需的规则。出于某种原因,
$(this).rules('remove','required')不起作用,但是
$(this).rules('add',{required:false})实现了我需要的结果。必填字段的验证被忽略,但ascii验证仍然有效!谢谢你的帮助@时尚,没问题。请参阅上面我的编辑<代码>规则('remove')
将不起作用,除非该规则最初是通过
.validate()
中的
规则
选项或通过
规则('add')
方法添加的。换句话说,
规则('remove')
如果使用
类添加该规则,则该规则将不起作用。