網站搜尋

javascript - 如何在程式碼中觸發 jQuery 的 change 事件


我有一個變更事件運作正常,但我需要讓它遞歸。

所以我有一個在變更時觸發的函數,它會根據類選擇器“更改”其他下拉選單(注意“drop downS”,可能不只一個)。這個代理變更不會觸發該函數,因此會失敗。我該如何讓它運作?

程式碼

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

到目前為止的建議似乎有效,但由於變更事件觸發了 ajax post,它現在似乎在這裡失敗。我打算稍微試試,但我覺得這是另一個問題的範疇。

答案#1

使用 trigger() 方法

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

答案#2

對我來說

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

是最好的方法。

注意:.change() 在較新的版本中已被棄用,請改用 .trigger('change')。

答案#3

不帶參數的 change() 方法會觸發一個 change 事件。你可以這樣寫:

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

答案#4

$(selector).change()

.change()

.trigger("change")

較長且較慢的替代方式,更適合抽象化。

.trigger("change")

$(selector).trigger("change")

答案#5

使用那個:

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

或

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

或

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

觸發器可以是任何 JavaScript 支援的事件。希望這對你們所有人來說都容易理解。