检查所有元素是否满足条件

时间:2013-03-18 06:07:38

标签: jquery

我需要一个jQuery过滤器/ map /每个类型函数来检查所有元素是否满足条件:

function areAllValid(inputs){
     return $.someFunction(inputs, function(input) { return input.length > 0; }); 
}

如果所有输入的长度都是> 0 someFunction应该返回true。在jQuery中有这样的东西吗?

8 个答案:

答案 0 :(得分:9)

答案是肯定的,它有一个符合你要求的方法grep。例如:

inputs= jQuery.grep(inputs, function(input){
return input.length>0;
});
if(inputs.length>0) return true;
return false;

我不测试它,也许它有一个很小的问题,但应该是这样的。

答案 1 :(得分:7)

您不需要使用jQuery来执行此操作。您可以使用{9}中支持的Array.prototype.every在本机JavaScript中执行此操作。

function areAllValid(inputs){
     return inputs.every(function(input) { return input.length > 0; }); 
}

如果您使用的是EcmaScript 2015,则可以进一步整理:

var areAllValid = inputs => inputs.every(input => input.length > 0);

答案 2 :(得分:4)

这将遍历每个项目,以及具有前一个结果的条件,以便只有在所有项目的条件为真时才返回true。您当然可以使用回调函数替换条件,并执行inputs.each(而不是$('input'),但您可能需要稍微调整代码,具体取决于输入是否为jquery对象。

var all = true;
  $('input').each( function(index, value) { 
    all = all & ($(value).val().length > 0);
  });
return all;

答案 3 :(得分:0)

不完全,但创建一个很容易:

    $.eachCondition = function (obj, conditionFunction){
        var trueCount=0;
        var falseCount=0;

        $.each(obj, function (i,v) {
          if (conditionFunction.call(this,i,v)) {
            trueCount++;
          }
          else {
            falseCount++;
          }
          });
          if (falseCount===0) {
            return true;
          }
          if (trueCount===0) {
            return false;
          }
          return undefined;
      };
      $.fn.eachCondition = function (conditionFunction) {
        return $.eachCondition(this, conditionFunction);
      };

以下是工作测试:http://jsbin.com/iwanof/2/

答案 4 :(得分:0)

我通常使用以下表单来获取JQuery中的匹配

state.routing.location.pathname

在您的具体情况下,它看起来像这样:

$.map($("[some selector]"), function(e) {
  return ([some matching mechanism]);
}).indexOf(false) == -1;

希望这可以节省你一些时间。

答案 5 :(得分:0)

有一些小的优化问题没有得到现有答案的解决,所以我会用我认为最具可读性/最佳性能的代码把我的帽子扔进去。

添加一个像这样的jQuery扩展方法,它会短路:

/** 
* Determines whether all elements of a sequence satisfy a condition.
* @@param  {function} predicate - A function to test each element for a condition.
* @@return {boolean}  true if every element of the source sequence passes the test in the specified predicate
*/
$.fn.all = function (predicate) {
    $(this).each(function (i, el) {
        if (!predicate.call(this, i, el)) return false;
    });
    // we made it this far, we're good.
    return true;
};

然后这样称呼:

var allValid = $("form :input").all(function () {
                   return $(this).valid();
                });

答案 6 :(得分:0)

快速小jQuery:

$(document).ready(function() {
  $('form input').keyUp(function() {
    var allValid = true;
    $.each($('form input'), function(input) { 
      allValid = input.val().length > 0 
    }
    if ( allValid )
      ...
    else
      ...
  })
});

答案 7 :(得分:0)

function areAllValid(inputs){
     return Array.prototype.every.call(inputs, function(input) { return input.length > 0; }); 
}