如何使用可变数量的参数检查多个OR条件

时间:2017-05-09 06:36:55

标签: javascript

我正在通过

检查一些输入标签是否为空
if(inputValue1.length === 0 || inputValue2.length === 0 || 
   inputValue3.length === 0 || inputValue4.length === 0)

但是我的代码越多,我发现我必须检查input标签的变量号是否为空或多次。

由于上面的代码是硬编码的,它只检查4个input标记值,我想创建一个函数来检查条件,给出可变数量的参数(给出input标记元素), OR运算符。例如:

checkEmptyInput(multiple_elements){}

可以传递多个和随机的参数,但仍然使用OR运算符检查条件。我无法想象我将如何完成这项功能。

4 个答案:

答案 0 :(得分:3)

使用列表。例如,如果您的所有输入都在某个容器中(例如,form),则可以使用querySelectorAll将所有输入作为列表获取:

var inputs = document.querySelectorAll("selector-for-the-form input");

这会返回一个length的集合,其中每个input都可以通过[0][1]等获得。所以:

function checkEmptyInput(list) {
    var index;
    for (index = 0; index < list.length; ++index) {
        if (list[0].value.length === 0) {
            return true; // There's an empty one
        }
    }
    return false; // There are no empty ones
}

答案 1 :(得分:0)

你可以尝试这样的事情。

var   input1 = [1, 2]
    , input2 = [1, 2]
    , input3 = [2, 1];

function test(...args) {
  return args.some(function(arg) {
    return arg.length === 0;
  });
};

var result1 = test(input1, input2, input3);
var result2 = test([], input1, input2);

console.log(result1, result2);

答案 2 :(得分:0)

您可以将所有变量传递给减少其参数的函数:

ES2015版本:

function checkEmptyInput(...multiple_elements) {
    return multiple_elements.reduce((a,b) => a || b, false);
}

ES5版本:

function checkEmptyInput() {
    return [].reduce.call(arguments, function(a,b) { return a || b; }, false);
}

按照描述使用

checkEmptyInput(variable1, variable2, variable3);

答案 3 :(得分:0)

0你需要一个通用的函数,可以使用任意数量的参数,并且可以返回错误:

下面的函数将采用回调和n个参数。回调函数将返回2个参数,第一个是状态true或false,第二个是消息,如果status为false。

function validateAll(callback, ...inputs){
    var len = inputs.length;
  for(var i=0; i < len; i++){
    if(inputs[i].value.length === 0){
        return callback(false, inputs[i].getAttribute('name') + 'Input not valid');
    }
  }
  return callback(true, null);
}

validateAll(function(status, msg){
    console.log(status, msg);
},input1,input2, input3);