25

すべての要素が条件を満たすかどうかを確認するには、jQueryのfilter / map /eachtype関数が必要です。

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

すべての入力の長さが0より大きい場合、someFunctiontrueを返す必要があります。jQueryでこのようなものはありますか?

4

8 に答える 8

11

答えはイエスです。要件を満たすことができるメソッド grep があります。例えば:

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

私はそれをテストしません。おそらく小さな問題がありますが、ほとんどこのようになるはずです。

于 2013-03-18T06:20:56.000 に答える
4

これは、すべてのアイテムに対して条件が true の場合にのみ true を返すように、各アイテムと前の結果の条件を通過します。もちろん、条件をコールバック関数に置き換えてinputs.each(代わりに$('input')実行することもできますが、入力が jquery オブジェクトであるかどうかに応じて、コードを少し調整する必要がある場合があります。

var all = true;
  $('input').each( function(index, value) { 
    all = all & ($(value).val().length > 0);
  });
return all;
于 2013-03-18T06:35:49.103 に答える
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();
                });
于 2016-11-02T12:19:29.047 に答える
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/

于 2013-03-18T07:25:46.830 に答える
0

私は通常、次のフォームを使用してJQueryで一致を取得します

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

あなたの特定のケースでは、次のようになります。

$.map(inputs, function(e) {
  return (e.length > 0);
}).indexOf(false) == -1;

これで時間が節約できることを願っています。

于 2016-02-17T14:46:05.567 に答える