我有一个数字列表。我有一个输入类型='文本'形式,有人可以写任何数字。 但我希望他输入的这个号码改为我列表中最接近的号码。
例如我的列表包含这些数字:1,5,10,12,19,23,100,400,999。这个顺序没有任何意义,甚至没有尝试弄清楚:)。 我也有最简单的形式:
<form id="myform">
<input type="text" id="mytext">
</form>
如果有人在我的输入中写入105,他的号码会变为100;如果他写18,他得到19等等......
有人有什么想法吗?我认为它可以在javascript(也许jquery)中完成,但我无法编写或找到一个工作的...
答案 0 :(得分:3)
试试这个
var theArray = [ 1, 5, 10, 12, 19, 23, 100, 400, 999 ];
var goal = parseInt(("#mytext").val());
var closest = null;
$.each(theArray, function(){
if (closest == null || Math.abs(this - goal) < Math.abs(closest - goal)) {
closest = this;
}
});
答案 1 :(得分:1)
我的方法是:
var precast = [1, 5, 10, 12, 19, 23, 100, 400, 999];
function recast(el, arr) {
var val = parseInt(el.value, 10);
if ((!el || !arr) && val >= arr[0]) {
return false;
}
else {
for (var i = 0, len = arr.length; i < len; i++) {
if (arr[i] > val) {
var d = arr[i] - val;
return arr[i-1] + d >= val ? arr[i-1] : arr[i];
}
}
}
}
document.getElementById('mytext').onblur = function(){
this.value = recast(this, precast);
};