Jak wyzwolić zdarzenie zmiany jQuery w kodzie


177

Mam zdarzenie zmiany, które działa poprawnie, ale muszę je powtórzyć.

Mam więc funkcję, która jest wyzwalana przy zmianie, która „zmieni” inne listy rozwijane w oparciu o selektor klas (zauważ: „drop downS”, może być więcej niż jeden). Ta zmiana serwera proxy nie wyzwala funkcji, a więc kończy się niepowodzeniem. Jak mogę to uruchomić?

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

Dotychczasowe sugestie wydają się działać, ale ponieważ zdarzenie zmiany wyzwala post w Ajax, teraz wydaje się, że zawodzi. Mam zamiar się tym bawić, ale to jest coś na inne pytanie, które czuję.


1
Podaj trochę kodu, żebyśmy mogli
rzucić

Jak możemy Ci powiedzieć, jak sprawić, by działał, skoro nie pokazałeś nam, co to jest?
user113716

1
Myślałem, że to prosta koncepcja i nie czułem, że kod jest wymagany. Wydaje się, że dotychczasowe odpowiedzi zrozumiały moje wyjaśnienie, dlatego teraz próbuję ich rozwiązań. Jeśli nie będę miał radości, wyślę kod. Moja realizacja jest właściwie dużo bardziej złożona.
4imble

1
Posortowałem to, był problem ze zmianą wartości po wysłaniu Ajax. Dziękuję wszystkim za pomoc. Opublikowane sugestie działały jak marzenie.
4imble

Odpowiedzi:


391

Użyj metody trigger ()

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

4
Czy jest z tego jakaś korzyść change()? A może to tylko preferencja?
Joshua Pinter

6
@JoshPinter nie ma prawdziwej korzyści, bardziej preferencja. Ale zdecydowanie łatwiej jest abstrahować jako parametr niż nazwa metody.
John Hartsock,

Ustawienie wartości przed faktycznym wyzwoleniem zdarzenia zmiany jest najlepszym sposobem !!
Kapil Yadav


20

Bezparametrowa postać metody change () wyzwala changezdarzenie. Możesz napisać coś takiego:

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


8

Użyć tego :

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

LUB

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

LUB

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

Wyzwalaczem może być każde zdarzenie, które obsługuje javascript. Mam nadzieję, że jest to łatwe do zrozumienia dla wszystkich.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.