Javascript:如何验证 4 个相关字段是否大于另一个
Javascript: How to validate 4 relative fields to be greater than another
所以我有四个字段需要一些逻辑。
逻辑必须如下所示,每个字段都必须大于之前的一个。让 [f1]、[f2]... 成为字段。
[f1] < [f2] < [f3] < [f4]
我遇到了一些疯狂的情况,因为如果我遇到这样的情况怎么办:
[null] < [null] < [null] < [f4]
现在我向 [f4] 字段添加一个值。这意味着 f3 的最大值必须低于 f4 值
现在我将值添加到字段 f2
[null] < [f2] < [null] < [f4]
糟糕!它也必须低于 [f4],但如果稍后我输入 [f3] 值,则它必须低于 [f3]。
另一边也一样,"GREATER THAN" 边...
是否有任何简单的方法来代替数千个 "if" 子句来实现它?
这就是我动态更改任何字段验证的方式:
$("form").removeData("validator");
$("#" + paramID).attr('data-val-range-max', valuemax)
$("#" + paramID).attr('data-val-range-min', valuemin)
$.validator.unobtrusive.parse(document);
编辑:
有效终点是所有元素是否有值,有效终点也如[5] < [null] < [null] < [10]
如果目的是查找数字是否按升序排列:
function lessThan(values){
if(values.length < 2) throw new Error("Can't make comparison");
var last = values[0],
result;
for(var i = 1; i < values.length; i++){
result = last < values[i];
last = values[i];
if(!result) break;
}
return result;
}
//lessThan([0,1,2,3]) === true;
//lessThan([0,1,0,3]) === false;
您可以使用 Array.prototype.every,它测试每个元素,如果没有通过测试则中断。
function lessThan(array) {
var a;
array = array.filter(function (a) { // filter the array
return a != null; // return only values != null
});
a = array.shift(); // get the first element by shifting the array
return array.every(function (b) { // return true if every element pass the test
var r = a < b; // make the test
a = b; // get the new comparing value for the next test
return r; // return the test result
});
}
document.write(lessThan([42]) + '<br>'); // true (obviously!)
document.write(lessThan([0, 1, 2, 3]) + '<br>'); // true
document.write(lessThan([null, null, null, 4]) + '<br>'); // true
document.write(lessThan([null, 3, null, 4]) + '<br>'); // true
document.write(lessThan([0, 1, 0, 3]) + '<br>'); // false
document.write(lessThan([5, null, null, 4]) + '<br>'); // false
document.write(lessThan([null, null, null, null]) + '<br>'); // true
喜欢的话可以替换
var r = a < b;
a = b;
return r;
和
return [a < b, a = b][0];
其中使用临时数组存储测试结果并将最后一个元素分配给 a.
所以我有四个字段需要一些逻辑。
逻辑必须如下所示,每个字段都必须大于之前的一个。让 [f1]、[f2]... 成为字段。
[f1] < [f2] < [f3] < [f4]
我遇到了一些疯狂的情况,因为如果我遇到这样的情况怎么办:
[null] < [null] < [null] < [f4]
现在我向 [f4] 字段添加一个值。这意味着 f3 的最大值必须低于 f4 值
现在我将值添加到字段 f2
[null] < [f2] < [null] < [f4]
糟糕!它也必须低于 [f4],但如果稍后我输入 [f3] 值,则它必须低于 [f3]。 另一边也一样,"GREATER THAN" 边...
是否有任何简单的方法来代替数千个 "if" 子句来实现它?
这就是我动态更改任何字段验证的方式:
$("form").removeData("validator");
$("#" + paramID).attr('data-val-range-max', valuemax)
$("#" + paramID).attr('data-val-range-min', valuemin)
$.validator.unobtrusive.parse(document);
编辑:
有效终点是所有元素是否有值,有效终点也如[5] < [null] < [null] < [10]
如果目的是查找数字是否按升序排列:
function lessThan(values){
if(values.length < 2) throw new Error("Can't make comparison");
var last = values[0],
result;
for(var i = 1; i < values.length; i++){
result = last < values[i];
last = values[i];
if(!result) break;
}
return result;
}
//lessThan([0,1,2,3]) === true;
//lessThan([0,1,0,3]) === false;
您可以使用 Array.prototype.every,它测试每个元素,如果没有通过测试则中断。
function lessThan(array) {
var a;
array = array.filter(function (a) { // filter the array
return a != null; // return only values != null
});
a = array.shift(); // get the first element by shifting the array
return array.every(function (b) { // return true if every element pass the test
var r = a < b; // make the test
a = b; // get the new comparing value for the next test
return r; // return the test result
});
}
document.write(lessThan([42]) + '<br>'); // true (obviously!)
document.write(lessThan([0, 1, 2, 3]) + '<br>'); // true
document.write(lessThan([null, null, null, 4]) + '<br>'); // true
document.write(lessThan([null, 3, null, 4]) + '<br>'); // true
document.write(lessThan([0, 1, 0, 3]) + '<br>'); // false
document.write(lessThan([5, null, null, 4]) + '<br>'); // false
document.write(lessThan([null, null, null, null]) + '<br>'); // true
喜欢的话可以替换
var r = a < b;
a = b;
return r;
和
return [a < b, a = b][0];
其中使用临时数组存储测试结果并将最后一个元素分配给 a.