gpt4 book ai didi

javascript - 如何将变量传递给 jQuery 验证

转载 作者:行者123 更新时间:2023-11-28 15:31:48 29 4
gpt4 key购买 nike

基于 this SO question 构建,我试图将两个变量传递给自定义验证器方法。使用 console.log 我可以看到上限和下限范围是在 HTML 中定义的,但没有正确传递给选项,而是得到 NaN

问题似乎是两个文本框的值尚未定义或设置(当它们在下面的验证规则中发送时),但是当它们到达验证器时(这只是一个猜测,而且我无法想出一种方法来在验证尝试之前嗅探它们的值)。因此,如果我将它们记录在验证器方法中,它们会显示得很好,但如果我将它们作为变量传递,它们会在 PCBID 对象(Chrome 浏览器)中显示为 NaN:

Object {PCBID: Object}
PCBID: Object
lower: NaN
upper: NaN
__proto__: Object
__proto__: Object

这是验证器,还设置了其他规则来防止输入任何整数,因此这不应该是问题:

//this validator checks to make sure the user has entered the PCBIDs in 
//the correct order in the range form.
$.validator.addMethod("highLowCheck", function (value, element, options)
{
console.log("Inside highLowCheck validator");
console.log(parseInt($('#pcbid_range_lower').val(),10)); //shows expected values
console.log(parseInt($('#pcbid_range_upper').val(),10)); //shows expected values

console.log(options.PCBID.upper); //NaN
console.log(options.PCBID.lower); //NaN
//evaluates to false because NaN is falsey
console.log(options.PCBID.upper > options.PCBID.lower);
console.log("Done logging");
return options.PCBID.upper > options.PCBID.lower;
}
);

以下是我尝试传递的变量:

            pcbid_range_upper: {
required: true,
digits: true,
rangelength: [3, 6],
highLowCheck:
{ PCBID:
{
//this doesn't work
lower: parseInt($('#pcbid_range_lower').val(),10),
upper: parseInt($('#pcbid_range_upper').val(),10)
}
},

如果我传入这样的原始值:

            highLowCheck:
{ PCBID:
{
lower: 1000, //works
upper: 2000
}
},

此方法有效,但不是很有用,因为用户可以输入他们喜欢的任何值,所以我必须能够将它们作为变量传递。我还需要它来处理变量,因为我需要从多个验证例程中调用它,否则我将直接使用验证器中的变量(就像我之前需要多个表单来使用验证器一样) .

如果有用的话,这里是两个输入的 HTML:

<div data-role="fieldcontain" data-controltype="textinput" class="pcbid_selections" tabindex="2">
<label for="pcbid_range_lower">Starting PCBID *</label>
<input name="pcbid_range_lower" id="pcbid_range_lower" class="create_group" placeholder="52759" value="" type="text" data-mini="true" />
</div>
<div data-role="fieldcontain" data-controltype="textinput" class="pcbid_selections" tabindex="3">
<label for="pcbid_range_upper">Ending PCBID *</label>
<input name="pcbid_range_upper" id="pcbid_range_upper" class="create_group" placeholder="52769" value="" type="text" data-mini="true">
</div>

问题:如何将规则内的变量传递给自定义验证器?

编辑:

解决方案:感谢@Sparky & Mathletics

验证器方法已更改为仅接收我想要传递的两个变量的名称字符串,而不是它们的内容。然后使用 @Mathletic 的建议,我只需将它们放入验证器内的 jQuery 变量形式中:

//this validator checks to make sure the user has entered the PCBIDs in the 
//correct order in the range form.
$.validator.addMethod("highLowCheck", function (value, element, options){
return parseInt($('#' + options.PCBID.upper).val(), 10) >
parseInt($('#' + options.PCBID.lower).val(), 10);
}
);

并从规则中调用它们,如下所示:

highLowCheck:
{
PCBID:
{
lower: 'pcbid_range_lower',
upper: 'pcbid_range_upper'
}
},

仅供发现此内容的人引用,我尝试将井号(“#”)与规则中的字符串一起传递(例如:'#pcbid_range_lower'),但这并没有'似乎有效。此方法可以,您只需在验证器方法中添加“#”即可,效果很好。

最佳答案

引用OP:

"The Question: How can I pass variables inside a rule to a custom validator?"

.validate()内声明...

rules: {
myField: {
customMethod: [1, "two", 3, "foo"]
}
}

customMethod 定义...

$.validator.addMethod("customMethod", function (value, element, options) {
console.log(options[0]); // <- 1
console.log(options[1]); // <- "two"
console.log(options[2]); // <- 3
console.log($('[name=' + options[3] + ']').val()); // <- value of field named "foo"
console.log(value); // <- the value of "myField"
console.log(element); // <- the "myField" object
// your function
}, "Custom message with options used as {0}, {1}, {2}, {3} etc.");

演示:http://jsfiddle.net/pupggbu7/

文档:http://jqueryvalidation.org/jQuery.validator.addMethod/

关于javascript - 如何将变量传递给 jQuery 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27025784/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com