web-dev-qa-db-fra.com

Comment déclencher un événement jQuery change dans le code

J'ai un événement de changement qui fonctionne bien, mais j'ai besoin de le faire recurse.

J'ai donc une fonction qui est déclenchée lors d'un changement et qui "changera" d'autres menus déroulants basés sur un sélecteur de classe (notez "menu déroulant", il pourrait y en avoir plus d'un). Ce changement de proxy ne déclenche pas la fonction et échoue donc. Comment puis-je le faire fonctionner?

Code

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

Les suggestions jusqu'à présent semblent fonctionner, mais comme l'événement de changement déclenche une publication ajax, il semble maintenant échouer ici. Je vais jouer avec ça mais c'est quelque chose pour une autre question que je ressens.

168
4imble

Utilisez la méthode trigger ()

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

pour moi, $('#element').val('...').change() est le meilleur moyen.

25

La forme sans paramètre de la méthode change () déclenche un événement change. Vous pouvez écrire quelque chose comme:

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

. change ()


.trigger ("change")

Plus long plus lent alternative, mieux pour l'abstraction.

. trigger ("change")

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

Utiliser ça :

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

OR

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

OR

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

Le déclencheur peut être n'importe quel événement pris en charge par javascript. J'espère qu'il est facile à comprendre pour vous tous.

4
Muhammad Fahad