2013-03-25 11 views
8

Cosa sto facendo male qui? L'idea è che posso separare le pressioni dei tasti freccia da qualsiasi altra cosa, ma ogni pressione di un tasto attiva l'avviso 'hai premuto un tasto freccia'. Qualsiasi aiuto sarebbe grande!jQuery.inArray() non funziona come previsto

jsFiddle qui o:

<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()' restituisce un indice, non un bool. Assicurati di leggere il [doc] (http://api.jquery.com/jQuery.inArray/) precedente. – Dom

+1

possibile duplicato di [jQuery.inArray non si comporta come previsto] (http://stackoverflow.com/questions/4304536/jquery-inarray-not-behaving-as-expected) –

+0

questo è un duplicato, mi spiace – MFB

risposta

25

Devi controllare se restituisce un indice> -1. L'indice è -1 se non c'è occorrenza della chiave nella matrice:

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

Ma io voglio controlla se la chiave è nell'array. È possibile o devo semplicemente invertire la logica della funzione? – MFB

+0

se l'indice restituito da quella funzione è> -1 di quello che significa che la chiave IS nell'array. In altre parole, quanto sopra restituirà vero se si trova nell'array. –

+0

Ok, nessun problema! –

1

la funzione jQuery inArray restituisce l'indice del valore. Per il tasto freccia a sinistra (37) restituisce 0 e viene interpretato come falso. Si dovrebbe cambiare il codice per essere> = 0

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

inArray

1

Il metodo $ .inArray restituisce l'indice dell'elemento se è nella matrice, e se non è nella matrice restituisce -1, quindi non puoi usarlo come condizione if. Cambiarlo in:

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

} 
Problemi correlati