Cara memicu jQuery mengubah acara dalam kode

177

Saya memiliki acara perubahan yang berfungsi dengan baik tetapi saya harus membuatnya berulang.

Jadi saya memiliki fungsi yang dipicu pada perubahan yang akan "mengubah" drop-down lainnya berdasarkan pemilih kelas (pemberitahuan "drop downS", mungkin ada lebih dari satu). Perubahan proxy ini tidak memicu fungsi dan gagal. Bagaimana saya bisa membuatnya bekerja?

Kode

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

Saran sejauh ini tampaknya berhasil, tetapi karena acara perubahan memicu posting ajax sekarang tampaknya gagal di sini. Saya akan bermain-main dengan itu tetapi itu adalah sesuatu untuk pertanyaan lain yang saya rasakan.

4imble
sumber
1
Berikan beberapa kode agar kita dapat melihatnya
Alex Rashkov
Bagaimana kami dapat memberi tahu Anda cara membuatnya berfungsi, ketika Anda belum menunjukkan kepada kami apa itu ?
user113716
1
Saya pikir itu adalah konsep yang sederhana dan tidak merasa kode diperlukan. Jawabannya sejauh ini tampaknya telah memahami penjelasan saya dan jadi saya mencoba solusi mereka sekarang. Jika saya tidak memiliki kegembiraan saya akan memposting beberapa kode. Implementasi saya sebenarnya jauh lebih kompleks.
4imble
1
Mengurutkannya, adalah masalah dengan saya mengubah nilai setelah posting ajax. Terima kasih atas bantuannya. Saran yang diposting berfungsi seperti pesona.
4imble

Jawaban:

391

Gunakan metode trigger ()

$(selector).trigger("change");
John Hartsock
sumber
4
Apakah ada manfaat selama ini change()? Atau hanya preferensi?
Joshua Pinter
6
@JoshPinter tidak ada manfaat nyata, lebih banyak preferensi. Tapi jelas lebih mudah untuk abstrak sebagai parameter daripada nama metode.
John Hartsock
Menetapkan nilai sebelum benar-benar memicu perubahan acara adalah cara terbaik !!
Kapil Yadav
33

bagi saya $('#element').val('...').change()adalah cara terbaik.

Luis Carlos Steffens
sumber
Ya !, saya suka yang ini
Juan Herrera
Iya! memungkinkan untuk memilih opsi pada saat yang sama. Saya pikir jawaban Anda pantas menjadi yang terbaik di sini.
Sergej Fomin
20

Bentuk tanpa parameter dari metode perubahan () memicu suatu changeperistiwa. Anda dapat menulis sesuatu seperti:

$(document).ready(function() {
    $("#yourInitialElementID").change(function() {
        // Do something here...
        $(".yourDropDownClass").change();
    });
});
Frédéric Hamidi
sumber
8

Gunakan Itu:

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

ATAU

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

ATAU

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

Pemicu dapat berupa peristiwa apa pun yang mendukung javascript .. Semoga mudah dimengerti oleh Anda semua.

Muhammad Fahad
sumber