1. ホーム
  2. ジャバスクリプト

[解決済み】コードでjQueryの変更イベントをトリガーする方法

2022-04-10 05:12:14

質問

正常に動作している変更イベントがあるのですが、それを再帰させる必要があります。

そこで私は、クラスセレクタに基づいて他のドロップダウンを "変更" する、変更時にトリガされる関数を持っています ("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投稿をトリガーするため、ここで失敗するようです。私はそれで遊ぶつもりですが、それは私が感じる別の質問のための何かです。

解決方法は?

を使用します。 trigger() メソッド

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