2010-07-30 19 views
132

Qual è il modo migliore per simulare un utente che immette il testo in una casella di immissione testo in JS e/o jQuery?Attiva un evento keypress/keydown/keyup in JS/jQuery?

ho poteva vogliono mettere in realtà il testo nella casella di input, voglio solo far scattare tutto l'evento gestori che normalmente vengono attivati ​​da un utente digitando informazioni in una casella di input. Questo significa focus, keydown, keypress, keyup e blur. Credo.

Quindi, come si compirebbe questo?

risposta

202

È possibile attivare uno degli eventi con una chiamata diretta a loro, in questo modo:

$(function() { 
    $('item').keydown(); 
    $('item').keypress(); 
    $('item').keyup(); 
    $('item').blur(); 
}); 

Vuol fare quello che stai cercando di fare?

Probabilmente si dovrebbe anche innescare .focus() e potenzialmente .change()

Se si desidera attivare il Key-eventi con tasti specifici, è possibile farlo in questo modo:

$(function() { 
    var e = $.Event('keypress'); 
    e.which = 65; // Character 'A' 
    $('item').trigger(e); 
}); 

C'è qualche interessante discussione gli eventi keypress qui: jQuery Event Keypress: Which key was pressed?, in particolare per quanto riguarda la compatibilità cross-browser con la proprietà .which.

+0

Solo curioso - che p arte ti mancava? Basta attivare gli eventi o modificare gli eventi prima di attivarli? – ebynum

+0

Modifica li. Non sapevo che era possibile con JQ – Alex

+8

Qualcuno sa come fare questo w/o jquery (o con dojo)? – streetlight

25

Per attivare un immettere pressione dei tasti, ho dovuto modificare la risposta @ebynum, in particolare, utilizzando la proprietà keyCode.

e = $.Event('keyup'); 
e.keyCode= 13; // enter 
$('input').trigger(e); 
+2

L'evento 'keydown' non viene catturato, o sto facendo qualcosa di sbagliato qui? fiddle.jshell.net/Palestinian/8d8J9 – Omar

+0

@ Omar: il motivo per cui non funzionava perché vincevi l'evento dopo aver aumentato l'evento. legare l'evento prima di attivare l'evento. controlla questo: http://fiddle.jshell.net/8d8J9/13/ –

+0

@cloak: funziona. Controlla qui il mio commento per un selettore completo per la correzione dei controlli di asp.net: http://www.codeproject.com/Tips/269388/How-prevent-Textbox-postback-when-hit-enter-key-in?msg=5145046 # xx5145046xx Assicurati di chiamarlo dopo aver inserito qualcosa nella dom se usi Ajax. –

9

Ora sei in grado di fare:

var e = $.Event("keydown", {keyCode: 64}); 
13

Ecco ad esempio una vaniglia js per attivare ogni caso: gli eventi

function triggerEvent(el, type){ 
if ('createEvent' in document) { 
     // modern browsers, IE9+ 
     var e = document.createEvent('HTMLEvents'); 
     e.initEvent(type, false, true); 
     el.dispatchEvent(e); 
    } else { 
     // IE 8 
     var e = document.createEventObject(); 
     e.eventType = type; 
     el.fireEvent('on'+e.eventType, e); 
    } 
} 
+4

Potete fornire alcuni esempi di utilizzo? Come verrebbe utilizzata la tua funzione per inviare un codice di accesso? – Mac

+1

Hai ipotizzato che le persone sapranno cosa sono "el" e "tipo". – Bwyss

+2

Il codice sorgente per questo post è disponibile al seguente link che include la documentazione: https://plainjs.com/javascript/events/trigger-an-event-11/ –

8

Si potrebbe dispacciamento come

el.dispatchEvent(new Event('focus')); 
el.dispatchEvent(new KeyboardEvent('keypress',{'key':'a'})); 
0

Prima di tutto, devo dire che campione da Sionnach733 ha funzionato perfettamente. Alcuni utenti si lamentano dell'assenza di esempi reali. Ecco i miei due centesimi. Ho lavorato su simulazione del mouse quando si utilizza questo sito: https://www.youtube.com/tv. Puoi aprire qualsiasi video e provare a eseguire questo codice. Esegue il passaggio al prossimo video.

function triggerEvent(el, type, keyCode) { 
    if ('createEvent' in document) { 
      // modern browsers, IE9+ 
      var e = document.createEvent('HTMLEvents'); 
      e.keyCode = keyCode; 
      e.initEvent(type, false, true); 
      el.dispatchEvent(e); 
    } else { 
     // IE 8 
     var e = document.createEventObject(); 
     e.keyCode = keyCode; 
     e.eventType = type; 
     el.fireEvent('on'+e.eventType, e); 
    } 
} 

var nextButton = document.getElementsByClassName('icon-player-next')[0]; 
triggerEvent(nextButton, 'keyup', 13); // simulate mouse/enter key press 
-1

È possibile raggiungere questo obiettivo con: EventTarget.dispatchEvent(event) e passando in una nuova KeyboardEvent come l'evento.

Ad esempio: element.dispatchEvent(new KeyboardEvent('keypress', {'key': 'a'}))

esempio di lavoro:

// get the element in question 
 
const input = document.getElementsByTagName("input")[0]; 
 

 
// focus on the input element 
 
input.focus(); 
 

 
// add event listeners to the input element 
 
input.addEventListener('keypress', (event) => { 
 
    console.log("You have pressed key: ", event.key); 
 
}); 
 

 
input.addEventListener('keydown', (event) => { 
 
    console.log(`key: ${event.key} has been pressed down`); 
 
}); 
 

 
input.addEventListener('keyup', (event) => { 
 
    console.log(`key: ${event.key} has been released`); 
 
}); 
 

 
// dispatch keyboard events 
 
input.dispatchEvent(new KeyboardEvent('keypress', {'key':'h'})); 
 
input.dispatchEvent(new KeyboardEvent('keydown', {'key':'e'})); 
 
input.dispatchEvent(new KeyboardEvent('keyup', {'key':'y'}));
<input type="text" placeholder="foo" />

MDN dispatchEvent

MDN KeyboardEvent

+1

L'autore non vuole sapere come ascoltare gli eventi . – C0ZEN

+0

Le mie scuse, mi sembra di aver frainteso la domanda. Ho modificato la mia risposta per riflettere meglio la domanda in questione –

Problemi correlati