2013-03-25 25 views
8

Was mache ich hier falsch? Die Idee ist, dass ich die Pfeiltasten von irgendetwas anderem trennen kann, aber jeder Tastendruck löst den Alarm aus "Sie haben eine Pfeiltaste gedrückt". Jede Hilfe wäre großartig!jQuery.inArray() funktioniert nicht wie erwartet

jsFiddle hier oder:

<input id='foo'> 

<script> 

$('#foo').keyup(function (e) { 
    var key = e.keyCode; 
    if ($.inArray(key, [37, 38, 39, 40])) { 
     alert('you pressed an arrow key'); 
    } else { 
     alert("you didn't press an arrow key"); 
    } 
}); 

</script> 
+6

'.inArray()' gibt einen Index, kein Bool. Lesen Sie vorher die [doc] (http://api.jquery.com/jQuery.inArray/). – Dom

+1

mögliches Duplikat von [jQuery.inArray verhält sich nicht wie erwartet] (http://stackoverflow.com/questions/4304536/jquery-inarray-not-behaving-as-expected) –

+0

Dies ist ein Duplikat, sorry – MFB

Antwort

25

Sie müssen prüfen, ob es einen Index> -1 zurückgibt. Der Index ist -1, wenn es kein Auftreten des Schlüssels in dem Array ist:

if ($.inArray(key, [37, 38, 39, 40]) > -1) 
+0

Aber ich möchte Überprüfen Sie, ob der Schlüssel IS im Array ist. Ist das möglich, oder verstelle ich einfach die Logik der Funktion? – MFB

+0

Wenn der von dieser Funktion zurückgegebene Index> -1 ist, bedeutet dies, dass der Schlüssel IS im Array ist. Mit anderen Worten, das Obige gibt wahr zurück, wenn es in dem Array ist. –

+0

Okay, kein Problem! –

1

Die jQuery InArray Funktion des Index des Wertes zurückzugibt. Für die linke Pfeiltaste (37) gibt es 0 zurück und es wird als falsch interpretiert. Sie sollten Ihren Code ändern sein> = 0

if ($.inArray(key, [37, 38, 39, 40]) > -1) 

inArray

1

Die $ .inArray Methode den Index des Elements zurück, wenn es in dem Array ist, und wenn es nicht in der Anordnung ist es wieder -1, also können Sie es nicht als if-Bedingung verwenden. Ändern Sie es in:

if($.inArray(key, [37, 38, 39, 40]) >= 0)) { 

} 
Verwandte Themen