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.


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

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


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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.