我有一个if语句必须为每个条件调用函数checkEmpty()。
function checkFormFilled(evt){
var isFilled;
if(checkEmpty('id1', 'class1') && //condition 1
checkEmpty('id2', 'class2') && //condition 2
checkEmpty('id3', 'class3') && //condition 3
checkEmpty('id4', 'class4')){ //condition 4
evt.preventDefault();
isFilled = true;
}
return isFilled;
}
问题是当条件1为假(任何先前条件为假)时,跳到evt.preventDefault()行,不会在checkEmpty()函数之后调用其他函数。
当所有条件都返回true时,我想调用evt.preventDefault()。
还有其他方法可以使这项工作吗?
答案 0 :(得分:3)
尝试逻辑运算符||
,即OR
答案 1 :(得分:1)
如果至少有一个条件为False,则它不会进入IF块。对于多个&&声明,一旦收到FALSE,所有其他成功的&&不再检查语句,并返回FALSE。
答案 2 :(得分:1)
如果你
必须为每个条件调用函数checkEmpty()。
和
当所有条件都返回true时,我想调用evt.preventDefault()。
如果您确定checkEmpty()
返回布尔值,则可以使用bitwise and (&
)运算符:
function checkEmpty(x) {
console.log('checkEmpty called for ' + x);
return false;
}
if(checkEmpty('..1', '....') & //condition 1
checkEmpty('..2', '....') & //condition 2
checkEmpty('..3', '....') & //condition 3
checkEmpty('..4', '....')){ //condition 4
console.log('inside if');
}
输出:
checkEmpty called for ..1
checkEmpty called for ..2
checkEmpty called for ..3
checkEmpty called for ..4
请参阅fiddle demo here。
答案 3 :(得分:1)
TypeResolverBuilder
function checkEmpty(val){ return val;}
function _conditioncheck(e){
if(checkEmpty(false) && checkEmpty(true) && checkEmpty(true) && checkEmpty(true)){
console.log('true....');
e.preventDefault();
}
}
它为我工作。
答案 4 :(得分:0)
它被称为短路。
1-在由&&组成的条件检查中,如果第一个元素的计算结果为false,则忽略所有剩余条件,对整个条件返回false。
2-在由||组成的条件检查中,如果第一个元素的计算结果为true,则忽略所有剩余条件,对整个条件返回true。
他编辑了这个问题。这不再是真的。我正在制作社区维基,这里留下来。
最好的解决方法是使用||
或在条件检查中重新排序子条件序列,以便在需要时对其他元素进行测试。
答案 5 :(得分:0)
你现在用链式&&
运算符做的是说所有这些事情都是真的那么event.preventDefault
。如果您确实需要检查每个条件并继续(如果有),那么您应该使用逻辑OR
运算符||
。
答案 6 :(得分:0)
假设你有一个对象数组,你可以试试every
函数。
实施例
var array = [];
for (var i = 0; i < 4; i++)
{
array.push({
id: i, bool: true
});
}
function check(item)
{
return item.bool == true || false;
}
if (array.every(check))
{
console.log("all true");
}
else
{
console.log("return false instead");
}
// Just an example of something that is false
array[1].bool = false;
if (!array.every(check))
{
console.log("something is false");
}
&#13;