2012-06-21 28 views
3

迄今爲止的故事.....JQuery的 - 使用選擇:包括 - 奇怪的結果

我想學習jQuery和IM也建立一個ASP.NET MVC應用程序需要一個「搜索您的輸入「搜索功能 - 完美學習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); 
    } 

}); 

});

我的問題.....

我的問題是,當我使用以下THIS.VALUE評估按鍵是空的第一個keydown事件,然後合拍整個

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

例子:

如果我輸入,讓我告訴你我的的console.log結果從用於輸入結果:

console results

proof i've inputted 100004

結果似乎永遠是一個落後一步。是keydown事件是最好的一個使用或我失去了一些東西。

一如既往 - 感謝傢伙和快樂編碼。

+2

+1對於至少一個寫得很好的問題,任何人都可能需要修復它。 – Loktar

+0

謝謝,v.much讚賞。 – garfbradaz

回答

2

因爲在keydown事件中的this.value不包含觸發事件的keystoke。改用密碼。

您可以通過函數中可用的事件對象訪問按鍵...但是直到密鑰被釋放後,輸入的值纔會包含它。

http://jsfiddle.net/rlemon/TGBUe/1/http://jsfiddle.net/rlemon/TGBUe/1/在這個例子中,你可以打開你的控制檯...並在輸入中輸入一個字符......你會注意到keydown的this.value對於第一個字符是空的,而keyup包含它。

+0

非常好,那是一種享受,謝謝! – garfbradaz

1

也許檢查在之前觸發AJAX部分已完成。

請注意,AJAX是異步的,代碼將繼續其流程,而不管AJAX請求是否異步完成。

嘗試移動function(JSONData)中的邏輯