コードでjQuery変更イベントをトリガーする方法


177

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

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


1
確認できるようにコードを提供してください
Alex Rashkov '22

それが何であるかを私たちに示していないときに、それを機能させる方法をどのように伝えることができますか?
user113716 2010年

1
それは単純な概念だと思い、コードが必要だとは感じませんでした。これまでの答えは私の説明を理解したようであり、私は現在それらの解決策を試みています。喜びがない場合は、コードを投稿します。私の実装は実際にははるかに複雑です。
4imble、2010年

1
ソートすると、ajaxポストの後で値を変更するときに問題が発生しました。助けてくれてありがとう。投稿された提案は魅力のように機能しました。
4imble、2010年

回答:


391

trigger()メソッドを使用する

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

4
これ以上のメリットはありますchange()か?それとも単なる好みですか?
Joshua Pinter、2015年

6
@JoshPinterは実際の利益ではなく、より優先されます。ただし、メソッド名よりもパラメータとして抽象化する方が間違いなく簡単です。
John Hartsock、2015年

実際に変更イベントをトリガーする前に値を設定するのが最善の方法です!!
Kapil Yadav


20

change()メソッドのパラメーターなしのフォームは、changeイベントをトリガーします。あなたは次のようなものを書くことができます:

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


8

それを使う:

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

または

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

または

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

トリガーは、javascriptがサポートする任意のイベントにすることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.