Perché l'evento di modifica jQuery non si attiva quando imposto il valore di una selezione utilizzando val ()?



4 Answers

Credo che tu possa attivare manualmente l'evento change con trigger() :

$("#single").val("Single2").trigger('change');

Anche se il motivo per cui non si attiva automaticamente, non ne ho idea.

jquery html select input

La logica nel gestore di eventi change() non viene eseguita quando il valore è impostato da val() , ma viene eseguito quando l'utente seleziona un valore con il mouse. Perchè è questo?

<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>



Aggiungere questo pezzo di codice dopo il val () sembra funzionare:

$(":input#single").trigger('change');



Nel caso in cui non si desideri confondere l'evento di modifica predefinito, è possibile fornire il proprio evento personalizzato

$('input.test').on('value_changed', function(e){
    console.log('value changed to '+$(this).val());
});

per attivare l'evento sul set di valori, puoi farlo

$('input.test').val('I am a new value').trigger('value_changed');



$(":input#single").trigger('change');

Questo ha funzionato per la mia sceneggiatura. Ho 3 combo e bind con l'evento chainSelect, ho bisogno di passare 3 valori da url e default selezionare tutto a tendina. L'ho usato

$('#machineMake').val('<?php echo $_GET['headMake']; ?>').trigger('change');

E il primo evento ha funzionato.




Related