Estou tentando acionar o change
evento em uma caixa de texto quando altero seu valor com um botão, mas ele não funciona. Verifique este violino .
Se você digitar algo nas caixas de texto e clicar em outro lugar, change
será acionado. No entanto, se você clicar no botão, o valor da caixa de texto é alterado, mas change
não é acionado. Por quê?
Respostas:
onchange
só é acionado quando o usuário digita a entrada e, em seguida, a entrada perde o foco.Você pode chamar o
onchange
evento manualmente usando depois de definir o valor:Como alternativa, você pode acionar o evento usando:
fonte
.change()
o.val()
método..val()
em.change()
porque eles fazem validação de entrada. Disparo.change()
em.val()
causaria um loop infinito.blur
realizar algo semelhante:$('#mytext').focus().val('New text').blur();
Da excelente sugestão de redsquare, isso funciona muito bem:
fonte
this
:return this.val(v).trigger("change");
Você pode substituir facilmente a
val
função para acionar alterações, substituindo-a por um proxy para aval
função original .basta adicionar este código em algum lugar do seu documento (depois de carregar o jQuery)
Um exemplo de trabalho: aqui
(Observe que isso sempre dispara
change
quandoval(new_val)
é chamado, mesmo que o valor não tenha realmente sido alterado.)Se você deseja ativar SOMENTE a alteração quando o valor realmente mudou, use este:
Exemplo ao vivo para isso: http://jsfiddle.net/5fSmx/1/
fonte
.val()
..val()
em mente de repente começaria a produzir efeitos colaterais :-p.Você precisa encadear o método da seguinte maneira:
fonte
Não, pode ser necessário acioná-lo manualmente após definir o valor:
ou:
fonte
Parece que os eventos não estão borbulhando. Tente o seguinte:
Eu espero que isso ajude.
Tentei apenas uma idade simples
$("#mytext").trigger('change')
sem salvar o valor antigo e os.change
incêndios, mesmo que o valor não mudasse. Por isso salvei o valor anterior e liguei$("#mytext").trigger('change')
apenas se ele mudar.fonte
A partir de fevereiro de 2019
.addEventListener()
não está mais funcionando com o jQuery.trigger()
ou.change()
, você pode testá-lo abaixo usando o Chrome ou o Firefox.você tem que usar em seu
.dispatchEvent()
lugar.fonte
Em https://api.jquery.com/change/ :
O
change
evento é enviado para um elemento quando seu valor é alterado. Este evento é limitado a<input>
elementos,<textarea>
caixas e<select>
elementos. Para caixas de seleção, caixas de seleção e botões de opção, o evento é disparado imediatamente quando o usuário faz uma seleção com o mouse, mas para os outros tipos de elemento, o evento é adiado até que o elemento perca o foco.fonte
Sei que esse é um tópico antigo, mas para outros que procuram, as soluções acima talvez não sejam tão boas quanto as seguintes, em vez de verificar
change
eventos, verifique osinput
eventos.fonte