Come attivare l'evento di modifica jQuery nel codice


177

Ho un evento di cambiamento che sta funzionando bene ma devo farlo ricorrere.

Quindi ho una funzione che viene attivata al momento del cambiamento che "cambierà" altri menu a discesa in base a un selettore di classe (notare "menu a discesa S", potrebbe essercene più di uno). Questa modifica del proxy non attiva la funzione e quindi non riesce. Come posso farlo funzionare?

Codice

$(document).ready(function () {
    var activeDropBox = null;

    $("select.drop-box").change(function () {
        var questionId = $(this).attr("questionId");
        var selectedAnswer = $(this).val();
        activeDropBox = this;

        alert(this.questionId);

        $.ajax(
        {
            type: "POST",
            url: answerChangedActionUrl,
            data: { questionId: questionId, selectedValue: selectedAnswer },
            success: function (data) {
                SetElementVisibility(data.ShowElement, questionId);
            }, error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert('XMLHttpRequest:' + XMLHttpRequest.responseText);
                alert('textStatus:' + textStatus);
                alert('errorThrown:' + errorThrown);
            }
        });
    });

    function SetElementVisibility(visible, questionId) {
        // I would like each child to then trigger the change event...
        $(".childOf" + questionId)[visible ? 'show' : 'hide']('slow');

        // Suggested code
        //$(".childOf" + questionId + " select").trigger("change");

        if (!visible) {
            $(".childOf" + questionId + " select").attr('selectedIndex', 0);
        }
    }
}

I suggerimenti finora sembrano funzionare, ma poiché l'evento change attiva un post Ajax, ora sembra non riuscire qui. Ci giocherò ma è qualcosa per un'altra domanda che sento.


1
Fornisci un codice in modo da poter dare un'occhiata
Alex Rashkov,

Come possiamo dirti come farlo funzionare, quando non ci hai mostrato di cosa si tratta?
user113716

1
Ho pensato che fosse un concetto semplice e non pensavo fosse richiesto il codice. Le risposte finora sembrano aver capito la mia spiegazione e quindi sto provando le loro soluzioni ora. Se non ho alcuna gioia, posterò del codice. La mia implementazione è in realtà molto più complessa.
4

1
Ordinato, è stato un problema con me cambiare il valore dopo il post ajax. Grazie a tutti per l'aiuto. I suggerimenti pubblicati hanno funzionato come un fascino.
4

Risposte:


391

Utilizzare il metodo trigger ()

$(selector).trigger("change");

4
C'è qualche vantaggio in questo change()? O è solo una preferenza?
Joshua Pinter,

6
@JoshPinter nessun vantaggio reale, più una preferenza. Ma sicuramente più facile da astrarre come parametro che come nome di metodo.
John Hartsock,

L'impostazione di un valore prima dell'attivazione effettiva dell'evento di modifica è il modo migliore !!
Kapil Yadav il


20

La forma senza parametri del metodo change () attiva un changeevento. Puoi scrivere qualcosa del tipo:

$(document).ready(function() {
    $("#yourInitialElementID").change(function() {
        // Do something here...
        $(".yourDropDownClass").change();
    });
});


8

Usa quello:

$(selector).trigger("change");

O

$('#id').trigger("click");

O

$('.class').trigger(event);

Il trigger può essere qualsiasi evento supportato da JavaScript. Spero che sia facile da capire per tutti voi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.