在jQuery验证插件中,我有一个输入字段的规则,如果隐藏输入的val等于1,则应设置为false,如果为2,则应设置为true。
我在输入字段的一个规则中创建了一个函数,在其中查找隐藏的输入值,并根据数字返回 true 或 false。但是,无论如何它都会返回 true,即使我可以看到它应该返回 false。参见 JSfiddle
.HTML:
<form>
<input type="hidden" name="pick" value="1"/>
<label>Username:</label>
<input name="user" id="user" type="text"/>
<input type="Submit"/>
</form>
j查询:
$('form').validate({
rules: {
user: {
required: true,
email: function(){
if($('input[name="pick"]').val() == 1){
console.log('Email shold be false');
return false;
}else{
return true;
}
}
}
}
});
为什么"返回错误"不起作用?我可以在控制台中看到"电子邮件应设置为 false">
注意:这只是我想要实现的一个例子。我将有更多的投入和规则更改。此外,隐藏的输入字段由其他度量值生成(不是示例中的两个按钮(。我知道我只能制作 2 个表单,但我宁愿用 1 个表单来做,因为会有很多变化,这需要很多表单/双 js 代码。
"为什么我在 jQuery 验证插件的规则中的函数不返回 false?">
不是。 email
规则是将你的函数视为布尔值,并将其存在解释为"不false
",从而启用该规则。
为了在此处使用函数,它需要位于 depends
回调参数内。
此外,由于您首先需要获取布尔值,因此不需要 if/else 语句;只需return
条件语句的结果即可。
将条件翻转为"不等于"(!=
(,以便在1
隐藏值时不强制执行email
规则。
rules: {
user: {
required: true,
email: {
depends: function(element) {
return ($('input[name="pick"]').val() != 1);
}
}
}
}
工作演示:jsfiddle.net/v4bf1mvj/
你不应该将email
设置为函数(email: function(){}
(。
应设置 email
对象的属性,以便框架可以读取所需的内容。
因此,要将您自己的函数放在email
中以验证(返回 true 或 false(,您应该这样做:
$('form').validate({
rules: {
user: {
required: true,
email: {
depends: function () {
var checkValue = $('input[name="pick"]').val() == 1;
return checkValue;
// Or this - depending on your requirements.
// return !checkValue;
}
}
}
}
});