web-dev-qa-db-ja.com

コードで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);
        }
    }
}

これまでのところ提案はうまくいくように思われますが、changeイベントがajax投稿を引き起こすのでここでは失敗するようです。私はそれを試してみるつもりですが、それは私が感じる別の質問のためのものです。

162
4imble

trigger()メソッド を使う

$(selector).trigger("change");
357
John Hartsock

私にとっては$('#element').val('...').change()が最善の方法です。

23

パラメータなし形式の change() メソッドはchangeイベントを発生させます。次のように書くことができます。

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

。change()


.trigger( "変更")

長い 遅い 代替、抽象化に適しています

。trigger( "change")

$(selector).trigger("change")
8
Geoffrey Hale

それを使う:

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

OR

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

OR

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

トリガーは、JavaScriptがサポートするイベントであればどれでも可能です。

4
Muhammad Fahad