javascript - Hur man triggar jQuery change-händelse i kod


Jag har en ändringshändelse som fungerar bra, men jag behöver få den att rekursivt köras.

Så jag har en funktion som triggas vid förändring som kommer att "ändra" andra rullgardinsmenyer baserat på en klassväljare (notera "drop downS", det kan finnas mer än en). Denna proxy-ändring triggar inte funktionen och misslyckas därför. Hur kan jag få det att fungera?

Kod

$(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);
        }
    }
}

Förslagen hittills verkar fungera, men när change-händelsen triggar ett ajax-post verkar det nu misslyckas här. Jag kommer att leka lite med det, men det är något för en annan fråga tycker jag.

Svar #1

Använd metoden trigger()

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

Svar #2

För mig

$('#element').val('...').change()

är det bästa sättet.

Observera: .change() är föråldrad i nyare versioner, använd .trigger('change') istället.

Svar #3

Den parameterfria formen av metoden change() utlöser en change-händelse. Du kan skriva något liknande:

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

Svar #4

$(selector).change()

.ändra()

.trigger("change")

Längre långsammare alternativ, bättre för abstraktion.

.trigger("change")

$(selector).trigger("change")

Svar #5

Använd Det :

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

ELLER

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

ELLER

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

Trigger kan vara vilken händelse som helst som JavaScript stöder.. Hoppas det är lätt att förstå för er alla.

Relaterade artiklar