3

ここまでの話……

私は JQuery を学びたいと思っています。また、「入力と同時に検索」検索機能を必要とする MVC ASP.NET アプリも構築しています。JQuery を学ぶのにも最適です。これまでのところ ( stackoverflowersの助けを借りて) AJAX/JSON ビットを取得することができました。ここで、各キーの押下を評価し、順序付けられていないリストとして作成された JSON 配列に対して検証したいと考えています。私が達成しようとしているのは、入力されたものを含むリストにアカウント番号のみを表示することです。したがって、私の推論は、 keydown イベントをチェックして検証することでした。当分の間、私のロジックが機能することを証明するために、アカウント番号の色を赤に変更して非表示にします。

これまでの私のJQueryコード....

http://jsfiddle.net/garfbradaz/JYdTU/28/

...そして便宜上....

$(document).ready(function() {
var $input = $("#livesearchinput"),
    filled = false;
$.ajaxSetup({
    cache: false
});
$input.keydown(function(key) {
    if (!filled) {
        filled = true;
        $.getJSON("/gh/get/response.json//garfbradaz/MvcLiveSearch/tree/master/JSFiddleAjaxReponses/", function(JSONData) {
            var $ul =
            $('<ul>').attr({
                id: "live-list"
            }).appendTo('div#livesearchesults');
            $.each(JSONData, function(i, item) {
                $.each(item, function(j, val) {
                    $('<li>').attr({
                        id: "live-" + val
                    }).append(val).appendTo($ul);
                });
            });
        });
    }

    var n = $("li:contains('" + this.value + "')").length;

    if (n === 0) {
        $("li").removeClass("color-change");
        console.log("1. value of n equals " + n + " : " + this.value);
    }
    else {
        $("li:contains('" + this.value + "')").addClass("color-change");
        console.log("2. value of n equals " + n + " : " + this.value);
    }

});

}); </p>

私の問題.....

私の問題は、次のthis.valueを使用してキープレスを評価すると、最初のキーダウンイベントで空になり、その後全体的にずれていることです

 var n = $("li:contains('" + this.value + "')").length

例:

100004を入力した場合、その結果を入力するためのChromeからのconsole.logの結果を表示させてください。

コンソールの結果

100004を入力した証拠

結果は常に一歩遅れているようです。keydown イベントは使用するのに最適なイベントですか、それとも何か不足していますか?

いつものように - みんなありがとう、幸せなコーディング。

4

2 に答える 2

2

this.valueキーダウンイベントには、イベントをトリガーしたキートークンが含まれていないためです。代わりにキーアップを使用してください。

関数で使用可能なイベントオブジェクトを介してキーストロークにアクセスできます...ただし、キーが解放されるまで、入力の値にはキートークンが含まれません。

http://jsfiddle.net/rlemon/TGBUe/1/この例では、コンソールを開いて入力に文字を入力できます...最初の文字のキーダウンthis.valueは空白ですがキーアップにはそれが含まれています。

于 2012-06-21T19:17:28.877 に答える
1

おそらく、 AJAX 部分が完了する前にチェックが起動します。

AJAX は非同期であり、非同期で完了する AJAX 要求に関係なく、コードはフローを継続することに注意してください。

ロジックを 内 function(JSONData)に移動してみてください。

于 2012-06-21T19:11:16.477 に答える