2011-09-15 23 views
5

Ho fatto i miei compiti e ho controllato molte domande, ma non sono riuscito a trovare qualcosa che possa andare al lavoro.Trigger pressione tasto (keydown) con jQuery

Ho un input di ricerca. Quando l'utente fa clic sull'esempio, voglio che la parola "dottore" sia scritta nella mia lettera di inserimento di ricerca per lettera. Avrei potuto farlo cambiando $ ("# search"). Val() molto tempo fa, ma ecco il problema. Quando normalmente l'utente digita il codice di completamento dell'introduzione alla ricerca, viene visualizzato il div. È attivato dall'evento keydown. Se cambio semplicemente l'attributo val di input, il div automatico di completamento non verrà fuori, quindi ho bisogno di attivare in qualche modo l'evento keydown in modo che venga fuori.

ho trovato questa soluzione:

$("#example").click(function() {  
    $("#search").focus(); 
    var e = jQuery.Event("keyup"); 
    e.keyCode = 50;      
    $("#search").trigger(e);      
}); 

ma non riuscivo a farlo funzionare. Qualche idea per favore?

Ecco come appare html:

<input type="text" id="search" /> 
Example: <span id="example">doctor</span> 
+0

Il mio titolo dice evento keydown, ma a quanto pare ciò può essere ottenuto solo con l'evento keyup, quindi nel codice ho usato invece keyup. Comunque, nessuno sta funzionando per me. – Nazar

+0

Ho anche provato ad usare e.which invece di e.keyCode lì. Ancora non succede nulla a cambiare. Lo script funziona fino all'evento focus(). L'input viene messo a fuoco e lo script sembra interrompere l'esecuzione. – Nazar

risposta

8
$("#example").click(function() {  
    $("#search").focus(); 
    var e = jQuery.Event("keydown"); 
    e.keyCode = 50;      
    $("#search").trigger(e);      
}); 

rif: Definitive way to trigger keypress events with jQuery

+0

Credo di aver trovato una risposta che funziona per me dal link che hai fornito, anche se ho guardato a questo prima non ho mai notato un commento. Citazione commento di @Nadia Alramli: > Non hai capito il concetto. Questo non è come dovrebbe fare > lavoro. il trigger chiamerà solo il gestore di eventi. In realtà non sarà > stampare la chiave. Se si desidera simulare l'effetto della stampa della chiave, > quindi aggiungere la chiave al valore di input e attivare l'evento allo > stessa ora. - Nadia Alramli, 7 maggio 09 alle 0:21 – Nazar

0

Un modo migliore è quello di innescare il vostro completamento automatico su un textChange event piuttosto che KeyUp/giù. In questo modo puoi utilizzare $("#search").val() in modo semplice e il programma di autocompletamento verrà attivato.

Aggiunto bonus: se si utilizza TextChange sarà anche innescare il completamento automatico se il testo utente copy-paste utilizzando il menu contestuale del mouse, ecc (e non si innescherà sui tasti tabulazione o freccia)

+0

Grazie per la risposta! Lo verificherò sicuramente. Non sapevo che un tale evento fosse possibile. Tuttavia ho filtrato il mio keydown, quindi se le frecce sono premute, non funzionerà automaticamente. – Nazar

+0

Ho appena realizzato che devo comunque attivare il tasto di pressione, perché quando l'utente preme sull'esempio, la parola _doctor_ verrà digitata e il div automatico di completamento verrà fuori. Poi avrò bisogno di attivare la freccia giù una volta e inserire una volta il tasto così andrà all'URL del primo suggerimento nel div automatico. Dovrebbe essere qualcosa come una demo. – Nazar

+0

Certo, ma se fossi in me, farei '.textchange (autocomplete_handler)' e un separato '.keydown (arrows_and_enter_handler)' –

Problemi correlati