0

番号のリストがあります。誰かが任意の数字を書くことができるinputtype='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 に答える