A lógica no change()
manipulador de eventos não está sendo executada quando o valor é definido por val()
, mas é executada quando o usuário seleciona um valor com o mouse. Por que é isso?
<select id="single">
<option>Single</option>
<option>Single2</option>
</select>
<script>
$(function() {
$(":input#single").change(function() {
/* Logic here does not execute when val() is used */
});
});
$("#single").val("Single2");
</script>
Acredito que você pode disparar manualmente o evento de alteração com
trigger()
:Embora por que ele não dispara automaticamente, não faço ideia.
fonte
$('#foo').change(function() { $( this ).val( 'whatever' ); });
Adicionar este pedaço de código após o val () parece funcionar:
fonte
$(":input#single")
. Na verdade, você realmente não deveria. Apenas encadeie após o.val()
. Você pode usar.trigger('change')
ou.change()
. Eles são exatamente os mesmos.Tanto quanto eu posso ler nas APIs. O evento é acionado apenas quando o usuário clica em uma opção.
http://api.jquery.com/change/
fonte
input
elementos, não quando o elemento perde o foco. Você sabe?Para facilitar, adicione uma função personalizada e chame-a sempre que desejar que a alteração do valor também acione a alteração
e
Ou você pode substituir a função val para sempre chamar a alteração quando o val for chamado
Exemplo em http://jsfiddle.net/r60bfkub/
fonte
change
-event sobre um controle e executando um retorno de chamada que (direta ou indiretamente) dispara novamente ochange
-event sobre o mesmo controle. Eu sugiro que você use outro nome para o evento que você acionar manualmente (por exemploexplicit.change
), para que ele não ativechange
novamente o -event, evite o loop e ainda permita que você reaja ao evento.Caso não queira se misturar com o evento de alteração padrão, você pode fornecer seu evento personalizado
para acionar o evento no conjunto de valores, você pode fazer
fonte
Corri para o mesmo problema enquanto usava o CMB2 com o Wordpress e queria me conectar ao evento de mudança de uma metabox de upload de arquivo.
Portanto, caso você não consiga modificar o código que chama a alteração (nesse caso, o script CMB2), use o código abaixo. O gatilho está sendo chamado APÓS o valor ser definido, caso contrário, seu eventHandler de alteração funcionará, mas o valor será o anterior, e não o que está sendo definido.
Aqui está o código que eu uso:
fonte
this.selector
dentro da$.fn.val
função de substituição , um seletor específico (depende do que é usado para o seletor). Este é o melhor que eu encontrei para fazer isso apenas para campos específicos, único problema é que você deve saber o que eles estão usando para o seletorIsso funcionou para o meu script. Eu tenho 3 combos e vincular com o evento chainSelect, eu preciso passar 3 valores por url e padrão selecionar todos drop-down. Eu usei isso
E o primeiro evento funcionou.
fonte
Se você acabou de adicionar a opção de seleção a um formulário e deseja acionar o evento de alteração, descobri que um setTimeout é necessário, caso contrário o jQuery não seleciona a caixa de seleção recém-adicionada:
fonte