Modo definitivo per attivare eventi keypress con jQuery
Domanda
Ho letto tutte le risposte a queste domande e nessuna delle soluzioni sembra funzionare.
Inoltre, ho la sensazione che l'attivazione della pressione dei tasti con caratteri speciali non funzioni affatto. Qualcuno può verificare chi ha fatto questo?
Soluzione
Se si desidera attivare la pressione dei tasti o l'evento keydown, è sufficiente:
var e = jQuery.Event("keydown");
e.which = 50; // # Some key code value
$("input").trigger(e);
Altri suggerimenti
Ora leggermente più conciso 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, inserisci invece il codice chiave 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 quali e keyCode sono normalizzati, si sbagliano molto gravemente. È sempre più sicuro eseguire i controlli cross-browser standard per e.which ed e.keyCode e in questo caso definirli entrambi.
Se stai usando anche l'interfaccia utente di jQuery, puoi fare così:
var e = jQuery.Event("keypress");
e.keyCode = $.ui.keyCode.ENTER;
$("input").trigger(e);
L'ho fatto funzionare con il keyup.
$("#id input").trigger('keyup');
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 sia 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 di 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. Ho dovuto ...
- In primo piano, salva lastFocus.element
-
Su sfocatura, salva la selezione di testo corrente (inizio e fine)
var pos = element.selection('getPos') lastFocus.pos = { start: pos.start, end: pos.end}
-
Quando viene premuto un pulsante sulla mia tastiera:
lastFocus.element.selection( 'setPos', lastFocus.pos) lastFocus.element.selection( 'replace', {text: myKeyPadChar, caret: 'end'})
può essere realizzato anche in questo modo ( docs )
$('input').trigger("keydown", {which: 50});
Di quello che vuoi fare in una sola riga puoi usare
$("input").trigger(jQuery.Event('keydown', { which: '1'.charCodeAt(0) }));
console.log (String.fromCharCode (event.charCode));
suppongo che non sia necessario mappare il personaggio.