Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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
Javascript jQuery在元数据标记和消息中使用多个参数验证自定义验证器_Javascript_Jquery_Jquery Validate - Fatal编程技术网

Javascript jQuery在元数据标记和消息中使用多个参数验证自定义验证器

Javascript jQuery在元数据标记和消息中使用多个参数验证自定义验证器,javascript,jquery,jquery-validate,Javascript,Jquery,Jquery Validate,我想使用jqueryvalidate来验证元数据标记中的年龄是否在两年之间,并将年份指定为参数 我遇到的问题是,我无法将参数作为对象传递,因此我不知道如何在错误消息中访问它们(并且找不到关于它的任何文档) HTML <input type="text" name="dob" id="dob" validAge="[17,66]" /> JavaScript jQuery.validator.addMethod('validAge', function (value, elem

我想使用jqueryvalidate来验证元数据标记中的年龄是否在两年之间,并将年份指定为参数

我遇到的问题是,我无法将参数作为对象传递,因此我不知道如何在错误消息中访问它们(并且找不到关于它的任何文档)

HTML

<input type="text" name="dob" id="dob" validAge="[17,66]" />


JavaScript

jQuery.validator.addMethod('validAge', function (value, element, params) {
        value = eLifeViewModel.age();
        if (value === '') {
            return false;
        }
        var range = JSON.parse(params);
        return value > range[0] && value < range[1];
    }, $.format('Applicants must be older than {0} and younger than {1} years of age'));
jQuery.validator.addMethod('validAge',函数(值、元素、参数){
value=eLifeViewModel.age();
如果(值==''){
返回false;
}
var range=JSON.parse(params);
返回值>范围[0]&值<范围[1];
},$.format('申请人必须大于{0}岁且小于{1}岁');

{0}的输出是我的参数字符串,{1}是HTTPInputElement



我现在已经编写了一个minAge和maxAge函数来解决这个问题,但我仍然希望能够解决这个问题。

变量
params
不返回字符串,而是返回一个对象

尝试直接从参数传递范围:

jQuery.validator.addMethod('validAge', function (value, element, params) {
        value = eLifeViewModel.age();
        if (value === '') {
            return false;
        }
        return value > params[0] && value < params[1];
    }, $.format('Applicants must be older than {0} and younger than {1} years of age'));
jQuery.validator.addMethod('validAge',函数(值、元素、参数){
value=eLifeViewModel.age();
如果(值==''){
返回false;
}
返回值>参数[0]&值<参数[1];
},$.format('申请人必须大于{0}岁且小于{1}岁');

您找不到文档,因为您无法找到文档

使用jQuery验证插件和自定义方法,当需要传递参数时,不能内联声明
validAge
规则


编辑

正如@John Bubriski所指出的,这应该是可行的。OP在其自定义方法中未正确访问参数

OP正在使用JSON.parse

var range = JSON.parse(params);
这会在控制台中出现语法错误,因为它无法将
params
识别为有效的JSON字符串。无需解析
params
变量

参数作为
params
传递到函数中,因此可以直接作为
params[0]
params[1]
等进行访问

jQuery.validator.addMethod('validAge', function (value, element, params) {
    value = eLifeViewModel.age();
    if (value === '') {  // <- You do NOT need this! 
    /* Use the "required" rule instead of this conditional */
        return false;
    }
    return value > params[0] && value < params[1];
}, $.format('Applicants must be older than {0} and younger than {1} years of age'));
jQuery.validator.addMethod('validAge',函数(值、元素、参数){
value=eLifeViewModel.age();
如果(value==''){//params[0]&&value
至少在最新的jQuery/Validate中,这是有效的。下面是一个显示一些自定义验证器的提琴,其中3个接受一系列参数:

下面是一个使用字符串参数的示例。您不必说
数据规则customname=“true”
,而是指定参数
数据规则customname='[“string”,1,2,3]'

(注意引号的翻转…使用单引号表示字符串似乎不起作用。使用双引号)

标记:

<div>
    Custom 3 (Requires 'pig' or 'mouse'): <input type="text" id="custom3" name="custom3" data-rule-required="true" data-rule-customv3='["pig","mouse"]' data-msg-customv3="Enter a cool animal name!" />
</div>

自定义3(需要“猪”或“鼠标”):
JS:

jQuery.validator.addMethod(“customv3”,函数(值、元素、参数){
if(此.可选(元素))
返回true;
对于(变量i=0;i
上述示例的唯一问题是,如果您需要
n
参数,我不确定是否有方法动态生成错误消息。当前代码工作正常,但假设有两个参数


我还有一篇博客文章详细介绍了使用基于属性的验证的一些其他方面:

谢谢NMC,有没有一种方法可以从HTML元数据标记中实现这一点?值是否总是作为字符串传递?它应该已经在HTML标记中传递了。您只是没有正确使用参数。我认为参数[0]您是min和params[1]是您的最大年龄。您不必解析字符串。本以为会是这样的。感谢您的确认。看起来这在最新版本中确实有效:很好!除了翻转引号外,我做的一切都很好。这对我帮助很大,因为我使用html属性来设置特定字段的规则。
jQuery.validator.addMethod('validAge', function (value, element, params) {
    value = eLifeViewModel.age();
    if (value === '') {  // <- You do NOT need this! 
    /* Use the "required" rule instead of this conditional */
        return false;
    }
    return value > params[0] && value < params[1];
}, $.format('Applicants must be older than {0} and younger than {1} years of age'));
<div>
    Custom 3 (Requires 'pig' or 'mouse'): <input type="text" id="custom3" name="custom3" data-rule-required="true" data-rule-customv3='["pig","mouse"]' data-msg-customv3="Enter a cool animal name!" />
</div>
jQuery.validator.addMethod("customv3", function(value, element, params) {
    if (this.optional(element))
        return true;

    for (var i = 0; i < params.length; i++)
        if (value == params[i])
            return true

    return false;
}, jQuery.validator.format("Please enter one of the following values: {0} {1}"));