我需要一个jQuery过滤器/ map /每个类型函数来检查所有元素是否满足条件:
function areAllValid(inputs){
return $.someFunction(inputs, function(input) { return input.length > 0; });
}
如果所有输入的长度都是> 0 someFunction
应该返回true。在jQuery中有这样的东西吗?
答案 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; });
}