Modo definitivo per triggersre gli eventi di keypress con jQuery

Ho letto tutte le risposte a queste domande e nessuna delle soluzioni sembra funzionare.

Inoltre, mi viene l’impressione che l’triggerszione della pressione di un tasto con caratteri speciali non funzioni affatto. Qualcuno può verificare chi ha fatto questo?

Se si desidera triggersre la pressione del tasto o l’evento keydown, tutto ciò che si deve fare è:

var e = jQuery.Event("keydown"); e.which = 50; // # Some key code value $("input").trigger(e); 

Leggermente più conciso ora con jQuery 1.6+ :

 var e = jQuery.Event( 'keydown', { which: $.ui.keyCode.ENTER } ); $('input').trigger(e); 

(Se non stai usando l’interfaccia utente di jQuery, sostituisci il codice di accesso appropriato).

La vera risposta deve includere keyCode:

 var e = jQuery.Event("keydown"); e.which = 50; // # Some key code value e.keyCode = 50 $("input").trigger(e); 

Anche se il sito Web di jQuery dice che e keyCode sono normalizzati, si sbagliano molto male. È sempre più sicuro eseguire i controlli standard tra browser per e.which ed e.keyCode e in questo caso è sufficiente definire entrambi.

Se stai usando l’interfaccia utente di jQuery, puoi fare così:

 var e = jQuery.Event("keypress"); e.keyCode = $.ui.keyCode.ENTER; $("input").trigger(e); 

Ok, per me che lavoro con questo …

 var e2key = function(e) { if (!e) return ''; var event2key = { '96':'0', '97':'1', '98':'2', '99':'3', '100':'4', '101':'5', '102':'6', '103':'7', '104':'8', '105':'9', // Chiffres clavier num '48':'m0', '49':'m1', '50':'m2', '51':'m3', '52':'m4', '53':'m5', '54':'m6', '55':'m7', '56':'m8', '57':'m9', // Chiffres caracteres speciaux '65':'a', '66':'b', '67':'c', '68':'d', '69':'e', '70':'f', '71':'g', '72':'h', '73':'i', '74':'j', '75':'k', '76':'l', '77':'m', '78':'n', '79':'o', '80':'p', '81':'q', '82':'r', '83':'s', '84':'t', '85':'u', '86':'v', '87':'w', '88':'x', '89':'y', '90':'z', // Alphabet '37':'left', '39':'right', '38':'up', '40':'down', '13':'enter', '27':'esc', '32':'space', '107':'+', '109':'-', '33':'pageUp', '34':'pageDown' // KEYCODES }; return event2key[(e.which || e.keyCode)]; }; var page5Key = function(e, customKey) { if (e) e.preventDefault(); switch(e2key(customKey || e)) { case 'left': /*...*/ break; case 'right': /*...*/ break; } }; $(document).bind('keyup', page5Key); $(document).trigger('keyup', [{preventDefault:function(){},keyCode:37}]); 

Nel caso in cui è necessario prendere in considerazione il cursore corrente e la selezione del testo …

Questo non funzionava per me per un’app AngularJS su Chrome. Come sottolinea Nadia nei commenti originali, il personaggio non è mai visibile nel campo di input (almeno, questa è stata la mia esperienza). Inoltre, le soluzioni precedenti non tengono conto della selezione del testo corrente nel campo di input. Ho dovuto usare una meravigliosa libreria jquery-selection .

Ho un tastierino numerico su schermo personalizzato che riempie più campi di input. Dovevo…

  1. In primo piano, salva l’ultimoFocus.elemento
  2. In sfocatura, salva la selezione del testo corrente (avvia e ferma)

     var pos = element.selection('getPos') lastFocus.pos = { start: pos.start, end: pos.end} 
  3. Quando viene premuto un pulsante sulla mia tastiera:

     lastFocus.element.selection( 'setPos', lastFocus.pos) lastFocus.element.selection( 'replace', {text: myKeyPadChar, caret: 'end'}) 

L’ho fatto funzionare con la chiave.

 $("#id input").trigger('keyup'); 

console.log( String.fromCharCode(event.charCode) );

non c’è bisogno di mappare il personaggio, credo.

può anche essere realizzato in questo modo ( documenti )

 $('input').trigger("keydown", {which: 50}); 

Di te lo vuoi fare in una sola riga che puoi usare

 $("input").trigger(jQuery.Event('keydown', { which: '1'.charCodeAt(0) }));