将数字更改为最接近数字列表

时间:2012-10-24 17:13:46

标签: javascript jquery forms input numbers

我有一个数字列表。我有一个输入类型='文本'形式,有人可以写任何数字。 但我希望他输入的这个号码改为我列表中最接近的号码。

例如我的列表包含这些数字:1,5,10,12,19,23,100,400,999。这个顺序没有任何意义,甚至没有尝试弄清楚:)。 我也有最简单的形式:

<form id="myform">
<input type="text" id="mytext">
</form>

如果有人在我的输入中写入105,他的号码会变为100;如果他写18,他得到19等等......

有人有什么想法吗?我认为它可以在javascript(也许jquery)中完成,但我无法编写或找到一个工作的...

2 个答案:

答案 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);
};

JS Fiddle demo