0

我有一个数字列表。我有一个输入 type='text' 表单,有人可以写任何数字。但我希望他输入的这个号码更改为我列表中最接近的号码。

例如,我的列表包含这些数字:1、5、10、12、19、23、100、400、999。这个序列没有意义,甚至不要试图弄清楚:)。而且我有最简单的形式:

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

如果某人在我的输入中输入 105,他的数字将变为 100;如果他写 18,他会得到 19,依此类推……

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

4

2 回答 2

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;
  }
});
于 2012-10-24T17:24:24.310 回答
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 小提琴演示

于 2012-10-24T17:28:41.157 回答