检查数组的值

时间:2014-02-12 17:09:16

标签: javascript jquery arrays

我正在创建自己的标记" 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 个答案:

答案 0 :(得分:1)

如果值,则

jQuery.inArray(...)会返回-1

所以:

if ($.inArray(EntryValue, AmericanCodes) < 0)
如果EntryValue中存在AmericanCodes

仅匹配。

  • 请尝试>= 0

其他一些事情(可能只是让JSFiddle太快了!):

  • 您已将CSS设为li.AR三次,而不是li.ARli.CRli.UR

  • e.keyCode == 32检查 space 键,而不是输入

  • 如果您使用 space 而非输入,则函数末尾的$(Entry).val("")将无效,因为{{1}在按下最近键入的字符之前调用event,因此在清空文本字段后将应用keypress键。您可能希望使用在按键后调用的space,但请记住在将keyup传递给trimRight()之前使用input删除$.inArray中的空格字符。

  • Event已经是一个jQuery对象,因此将其包装为$(Event)是多余的,只会浪费几个周期。

使用所有这些更改来运行JSFiddle:here