Existe uma maneira de ter keyup
, keypress
, blur
, e change
eventos chamam a mesma função em uma linha ou eu tenho que fazê-las separadamente?
O problema que tenho é que preciso validar alguns dados com uma pesquisa de banco de dados e gostaria de garantir que a validação não seja perdida em nenhum caso, seja digitada ou colada na caixa.
jquery
events
jquery-events
shaneburgess
fonte
fonte
.on('keyup.foo keypress.foo blur.foo change.foo', …)
ou.on('keyup keypress blur change .foo', …)
?on('click tap', e => {...})
. O ouvinte pode ser acionado duas vezes, eu só quero acionar uma vez, como posso codificar na função de ouvinte?$('#element:not(.busy)').on('keyup keypress blur change', function(e){…});
finalmente, remova o className 'busy'.A partir do jQuery 1.7, o
.on()
método é o método preferido para anexar manipuladores de eventos a um documento. Para versões anteriores, o.bind()
método é usado para anexar um manipulador de eventos diretamente aos elementos.fonte
Eu estava procurando uma maneira de obter o tipo de evento quando o jQuery ouve vários eventos ao mesmo tempo, e o Google me colocou aqui.
Então, para os interessados,
event.type
é a minha resposta:Mais informações no documento jQuery .
fonte
Você pode usar o método bind para anexar a função a vários eventos. Basta passar os nomes dos eventos e a função manipuladora, como neste código:
Outra opção é usar o suporte de encadeamento da jquery api.
fonte
Se você anexa o mesmo manipulador de eventos a vários eventos, geralmente encontra o problema de mais de um deles disparar de uma só vez (por exemplo, o usuário pressiona a guia após a edição; todas as teclas pressionadas, alteradas e desfocadas podem disparar).
Parece que o que você realmente deseja é algo como isto:
fonte
É assim que eu faço.
fonte
Você pode definir a função que gostaria de reutilizar como abaixo:
E mais tarde, você pode definir quantos ouvintes de eventos desejar no seu objeto para acionar essa função usando on ('event'), deixando um espaço no meio, como mostrado abaixo:
fonte
A resposta de Tatu é como eu o faria intuitivamente, mas tive alguns problemas no Internet Explorer com essa maneira de aninhar / vincular os eventos, mesmo que isso seja feito através do
.on()
método.Não consegui identificar exatamente com quais versões do jQuery esse é o problema. Mas às vezes vejo o problema nas seguintes versões:
Minha solução alternativa foi definir primeiro a função,
e depois manipular os eventos individualmente
Essa não é a solução mais bonita, mas funciona para mim, e eu pensei em divulgá-la para ajudar outras pessoas que possam se deparar com esse problema.
fonte
Este tutorial é sobre como lidar com vários eventos.
fonte
É possível usar
.on()
, que aceita a seguinte estrutura:,.on( events [, selector ] [, data ], handler )
para que você possa passar vários eventos para esse método. No seu caso, deve ficar assim:E aqui está o exemplo ao vivo:
fonte
É simples implementar isso com os métodos DOM internos, sem uma grande biblioteca como o jQuery; se você quiser, é preciso um pouco mais de código - repita uma matriz de nomes de eventos e adicione um ouvinte para cada:
fonte