2013-03-25 22 views
8

Co ja tu robię źle? Chodzi o to, że mogę oddzielić nacisk klawiszy od cokolwiek innego, ale każde naciśnięcie klawisza uruchamia alarm "naciskasz klawisz strzałki". Każda pomoc będzie świetna!jQuery.inArray() nie działa zgodnie z oczekiwaniami

jsFiddle tutaj lub:

<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()' zwraca indeks, a nie bool. Upewnij się, że przeczytałeś [dokument] (http://api.jquery.com/jQuery.inArray/) wcześniej. – Dom

+1

możliwy duplikat [jQuery.inArray nie zachowuje się zgodnie z oczekiwaniami] (http://stackoverflow.com/questions/4304536/jquery-inarray-not-behaving-as-expected) –

+0

To jest duplikat, przepraszam – MFB

Odpowiedz

25

Trzeba sprawdzić, czy zwraca indeks> -1. Indeks jest -1 jeśli nie występowanie klucza w tablicy:

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

Ale chcę sprawdź, czy klucz IS w tablicy. Czy to możliwe, czy mogę po prostu odwrócić logikę funkcji? – MFB

+0

, jeśli indeks zwracany przez tę funkcję ma wartość> -1, oznacza to, że klucz IS znajduje się w tablicy. Innymi słowy, powyższe zwróci true, jeśli znajduje się w tablicy. –

+0

Okay, nie ma problemu! –

1

Funkcja jQuery inArray zwraca wskaźnik wartości. Dla klawisza strzałki w lewo (37) zwraca 0 i jest interpretowany jako fałszywy. należy zmienić kod, aby być> = 0

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

inArray

1

Metoda $ .inArray zwraca indeks elementu, jeśli jest w tablicy, a jeśli nie jest w tablicy zwraca -1, więc nie możesz go użyć jako warunku if. Zmień go na:

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

} 
Powiązane problemy