Não, você sente falta do conceito. Não é assim que deve funcionar. O acionador chamará apenas o manipulador de eventos. Na verdade, não imprimirá a chave. Se você deseja simular o efeito de imprimir a chave, basta adicionar a chave ao valor de entrada e acionar o evento ao mesmo tempo.
Nadia Alramli
Interessante, eu não sabia disso. Nesse caso, você pode me dizer se o acionamento do evento também o acionará para bibliotecas não-jquery. por exemplo, se eu tiver um onKeydown configurado em JS comum, ele capturará meu evento "falso"?
Mkoryak
2
sim, se houvesse um onkeydown = '...' configurado em js simples. Será acionado pelo evento falso. Eu não tinha certeza disso. Mas fiz um teste rápido e funcionou.
Nadia Alramli
2
@ Nadia Obrigado por isso! Eu li todas as respostas, perguntando-me por que as coisas não estavam funcionando antes de perceber que minhas expectativas não estavam corretas. Suspeito que muitas outras pessoas tenham os mesmos conceitos errados.
Mikemaccana
3
Dois anos depois ... lendo a página, parece que o caminho definitivo é: $ ('input # search'). Trigger ($. Event ('keydown', {qual: $. Ui.keyCode.ENTER, keyCode: $ .ui.keyCode.ENTER}));
Molokoloco 16/05
Respostas:
365
Se você deseja acionar o evento de pressionamento ou pressionamento de tecla, tudo o que você precisa fazer é:
var e = jQuery.Event("keydown");
e.which =50;// # Some key code value
$("input").trigger(e);
Resposta muito boa. Vale ressaltar que o jQuery.Event está disponível para o jQuery 1.3 ou superior. Tornou-se relevante nesta pergunta: stackoverflow.com/questions/1823617/… #
artlung
8
Isso não funcionou para mim com um controle deslizante jQuery UI. Eu tive que definir o e.keyCode como a resposta do OreiA abaixo.
CrizCraig
2
fwiw, eu tive mais sucesso com 'keyup' para meu aplicativo
Lembre-se de substituir 'keyCode' por 'what' também.
Richard Nienaber
Sim, você deve definir quais e keyCode para ser seguro (se as verificações evento ouvinte para e.KeyCode, ele só irá funcionar se você define keyCode ao criar o objeto jQuery.Event)
jackocnr
1
O jQuery normaliza qual / keyCode, portanto, colocar um ou outro deve fazer as duas coisas.
Nigel Angel
+1 no link para api.jquery.com; e as versões atuais do jQuery não normalize que / keyCode, então você deve fornecer tanto para a segurança
Victor
2
@SamuelLindblom Eu deveria ter escrito com mais clareza: o jQuery não normaliza as propriedades de eventos passadas .trigger(jQuery.Event('name', props)). Veja o exemplo jsfiddle.net/9ggmrbpd/1 - as propriedades do evento acionado são passadas como estão. Código fonte: github.com/jquery/jquery/blob/master/src/event.js#L739
Victor
68
A resposta real deve incluir keyCode:
var e = jQuery.Event("keydown");
e.which =50;// # Some key code value
e.keyCode =50
$("input").trigger(e);
Embora o site da jQuery diga que qual e keyCode são normalizados, eles estão muito enganados. É sempre mais seguro fazer as verificações padrão no navegador para e.which e e.keyCode e, nesse caso, apenas definir os dois.
Caso você precise levar em consideração o cursor atual e a seleção de texto ...
Isso não estava funcionando para mim para um aplicativo AngularJS no Chrome. Como Nadia aponta nos comentários originais, o personagem nunca é visível no campo de entrada (pelo menos, essa foi a minha experiência). Além disso, as soluções anteriores não levam em consideração a seleção de texto atual no campo de entrada. Eu tive que usar uma maravilhosa biblioteca jquery-selection .
Eu tenho um teclado numérico personalizado na tela que preenche vários campos de entrada. Eu precisei...
Em foco, salve o lastFocus.element
No desfoque, salve a seleção de texto atual (iniciar e parar)
var pos = element.selection('getPos')
lastFocus.pos ={ start: pos.start, end: pos.end}
Isso parece não funcionar, pois usa o argumento extraParameters, que não define nada dentro do argumento do evento, mas adiciona argumentos extras ao retorno de chamada do manipulador de eventos.
Respostas:
Se você deseja acionar o evento de pressionamento ou pressionamento de tecla, tudo o que você precisa fazer é:
fonte
Um pouco mais conciso agora com o jQuery 1.6+ :
(Se você não estiver usando a interface do usuário do jQuery, insira o código-chave apropriado.)
fonte
.trigger(jQuery.Event('name', props))
. Veja o exemplo jsfiddle.net/9ggmrbpd/1 - as propriedades do evento acionado são passadas como estão. Código fonte: github.com/jquery/jquery/blob/master/src/event.js#L739A resposta real deve incluir keyCode:
Embora o site da jQuery diga que qual e keyCode são normalizados, eles estão muito enganados. É sempre mais seguro fazer as verificações padrão no navegador para e.which e e.keyCode e, nesse caso, apenas definir os dois.
fonte
e.keyCode = e.which = 50;
em uma única linha seria melhor. :)keyCode
não funcionou. Teve para definir tanto para torná-lo trabalhoSe você também estiver usando a interface do usuário do jQuery, poderá fazer o seguinte:
fonte
Eu fiz funcionar com keyup.
fonte
Ok, para mim que trabalha com isso ...
fonte
Caso você precise levar em consideração o cursor atual e a seleção de texto ...
Isso não estava funcionando para mim para um aplicativo AngularJS no Chrome. Como Nadia aponta nos comentários originais, o personagem nunca é visível no campo de entrada (pelo menos, essa foi a minha experiência). Além disso, as soluções anteriores não levam em consideração a seleção de texto atual no campo de entrada. Eu tive que usar uma maravilhosa biblioteca jquery-selection .
Eu tenho um teclado numérico personalizado na tela que preenche vários campos de entrada. Eu precisei...
No desfoque, salve a seleção de texto atual (iniciar e parar)
Quando um botão no meu teclado é pressionado:
fonte
Você quer fazer isso em uma única linha, você pode usar
fonte
console.log( String.fromCharCode(event.charCode) );
não há necessidade de mapear o personagem, eu acho.
fonte
Isso pode ser realizado como este docs
fonte