为什么我的函数在 jQuery 验证插件的规则中不返回 false?
Why is my function inside a rule in jQuery Validation Plugin not returning false?
在 jQuery 验证插件中,我有一个输入字段规则,如果隐藏输入的 val 等于 1,则应设置为 false,如果为 2,则应设置为 true。
我在输入字段的规则之一内创建了一个函数,我在其中查找隐藏的输入 val,并根据数字返回 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>
jQuery:
$('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;
}
}
}
}
});
为什么 "return false" 不起作用?我可以在控制台中看到 "Email should be set to false"
注意:这只是我正在努力实现的一个例子。我将有更多的输入和规则更改。此外,隐藏的输入字段是由其他措施生成的(不是示例中的两个按钮)。我知道我可以只做 2 个表格,但我更想用 1 个来做,因为会有很多变化,这将需要很多表格/双重 js 代码。
您不应将 email
设置为函数 (email: function(){}
)。
您应该设置 email
对象的属性,以便框架可以读取它需要的内容。
因此,要在 email
中放置您自己的函数来验证(return 真或假),您应该这样做:
$('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;
}
}
}
}
});
"Why is my function inside a rule in jQuery Validation Plugin not returning false?"
不是。 email
规则将您的函数视为布尔值并将其仅存在解释为 "not false
",从而启用该规则。
为了在这里使用函数,它需要在 the depends
callback parameter 内部。
此外,由于您首先需要获得一个布尔值,因此不需要 if/else 语句;只是 return
你的条件语句的结果。
将条件翻转为 "not equals" (!=
),因此当隐藏值为 1
.
时,不会强制执行 email
规则
rules: {
user: {
required: true,
email: {
depends: function(element) {
return ($('input[name="pick"]').val() != 1);
}
}
}
}
在 jQuery 验证插件中,我有一个输入字段规则,如果隐藏输入的 val 等于 1,则应设置为 false,如果为 2,则应设置为 true。
我在输入字段的规则之一内创建了一个函数,我在其中查找隐藏的输入 val,并根据数字返回 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>
jQuery:
$('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;
}
}
}
}
});
为什么 "return false" 不起作用?我可以在控制台中看到 "Email should be set to false"
注意:这只是我正在努力实现的一个例子。我将有更多的输入和规则更改。此外,隐藏的输入字段是由其他措施生成的(不是示例中的两个按钮)。我知道我可以只做 2 个表格,但我更想用 1 个来做,因为会有很多变化,这将需要很多表格/双重 js 代码。
您不应将 email
设置为函数 (email: function(){}
)。
您应该设置 email
对象的属性,以便框架可以读取它需要的内容。
因此,要在 email
中放置您自己的函数来验证(return 真或假),您应该这样做:
$('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;
}
}
}
}
});
"Why is my function inside a rule in jQuery Validation Plugin not returning false?"
不是。 email
规则将您的函数视为布尔值并将其仅存在解释为 "not false
",从而启用该规则。
为了在这里使用函数,它需要在 the depends
callback parameter 内部。
此外,由于您首先需要获得一个布尔值,因此不需要 if/else 语句;只是 return
你的条件语句的结果。
将条件翻转为 "not equals" (!=
),因此当隐藏值为 1
.
email
规则
rules: {
user: {
required: true,
email: {
depends: function(element) {
return ($('input[name="pick"]').val() != 1);
}
}
}
}