我正在创建自己的标记" thingy"它的功能与Stack Overflow相似。
但是,我的代码要求我检查两个类别(数组),AmericanCodes
和CanadianCodes
。如果两个数组中的任何一个都不存在标记,我需要以不同的方式处理它。
除了我的$.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("");
}
});
});
答案 0 :(得分:1)
jQuery.inArray(...)会返回-1
。
所以:
if ($.inArray(EntryValue, AmericanCodes) < 0)
如果EntryValue
中存在AmericanCodes
,仅匹配。
>= 0
。其他一些事情(可能只是让JSFiddle太快了!):
您已将CSS设为li.AR
三次,而不是li.AR
,li.CR
和li.UR
。
e.keyCode == 32
检查 space 键,而不是输入!
如果您使用 space 而非输入,则函数末尾的$(Entry).val("")
将无效,因为{{1}在按下最近键入的字符之前调用event,因此在清空文本字段后将应用keypress
键。您可能希望使用在按键后调用的space
,但请记住在将keyup
传递给trimRight()
之前使用input
删除$.inArray
中的空格字符。
Event
已经是一个jQuery对象,因此将其包装为$(Event)
是多余的,只会浪费几个周期。
使用所有这些更改来运行JSFiddle:here