2014-02-12 98 views
0

我正在創建自己的標記「thingy」,它的功能與Stack Overflow的功能類似。檢查對陣列的值

但是,我的標籤要求我檢查兩個類別(數組),AmericanCodesCanadianCodes。如果標籤不存在於兩個數組中的任何一箇中,我需要以不同的方式處理它。

似乎一切正常,除了我的$.inArray功能。

它的行爲就好像它每次都在第一個數組中找到一樣。 (你會明白我的意思是,當你查看小提琴)

這裏是我的代碼:小提琴以下鏈接

$(document).ready(function() { 
    var AmericanCodes = ["AA", "AB", "AC", "AD", "AE", "AF"]; // Known american conversion codes 
    var CanadianCodes = ["CA", "CB", "CC", "CD", "CE", "CF"]; // Known canadian conversion codes 
    var UnknownCodes = []; // Collects Unrecognized Codes 
    var Entry = $("input#RecessiveCodes"); // Set Input 
    $(Entry).keypress(function (e) { // 
     if (e.keyCode == 32) { // This is the enter key 
      var EntryValue = $(Entry).val(); // Get Input 
      console.log(EntryValue); 
      if ($.inArray(EntryValue, AmericanCodes) < 0) { // Check if it's an american code 
       $("ul#EnteredCodes").append("<li class='AR'>", EntryValue, "</li>") // Style knowns slightly different than unkown 
      } else if ($.inArray(EntryValue, CanadianCodes) < 0) { // Check if it's an canadian code 
       $("ul#EnteredCodes").append("<li class='CR'>", EntryValue, "</li>") // Style knowns slightly different than unkown 
      } else { 
       UnknownCodes.push($(EntryValue)); //Add to list but store unknown reccessive seperatley 
       $("ul#EnteredCodes").append("<li class='UR'>", EntryValue, "</li>") // Style unknowns slightly different 
      } 
      $(Entry).val(""); 
     } 
    }); 
}); 

jsFiddle

回答

1

jQuery.inArray(...)返回-1如果該值出現在數組中。

所以:

if ($.inArray(EntryValue, AmericanCodes) < 0) 

只匹配,如果EntryValueAmericanCodes存在。

  • 改爲嘗試>= 0

夫婦的其他東西(也許只是從製作的jsfiddle太快!):

  • 你已經把CSS作爲li.AR三次,而不是li.AR,和li.UR

  • e.keyCode == 32檢查的空間關鍵,不是進入

  • 如果您正在使用空間進入,您$(Entry).val("")在功能將無法工作,因爲keypress事件被稱爲前的最近輸入的字符被按下的結束,所以space關鍵將是在文本字段被清空後應用。您可能想要使用在按鍵後調用的keyup,但請記住在將它傳遞到$.inArray之前,請使用trimRight()input中刪除空格字符。

  • Event已經是一個jQuery對象,所以將它包裝爲$(Event)是多餘的,只是浪費了幾個週期。

工作的jsfiddle所有這些變化:here