Búsqueda de sitios web

javascript - Cómo activar el evento change de jQuery en el código


Tengo un evento de cambio que está funcionando bien, pero necesito hacer que se ejecute de manera recursiva.

Entonces tengo una función que se activa al cambiar que "cambiará" otros menús desplegables basándose en un selector de clase (nota "menúS desplegableS", podría haber más de uno). Este cambio indirecto no dispara la función y por lo tanto falla. ¿Cómo puedo hacer que funcione?

Código

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

Las sugerencias hasta ahora parecen funcionar, pero dado que el evento de cambio activa un envío ajax, ahora parece fallar aquí. Voy a experimentar con ello, pero siento que eso es algo para otra pregunta.

Respuesta #1

Usa el método trigger()

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

Respuesta #2

Para mí

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

es la mejor manera.

Nota: .change() está en desuso en versiones más recientes, use .trigger('change') en su lugar.

Respuesta #3

La forma sin parámetros del método change() dispara un evento change. Puedes escribir algo como:

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

Respuesta #4

$(selector).change()

.cambiar()

.trigger("change")

Alternativa más larga y lenta, mejor para la abstracción.

.trigger("change")

$(selector).trigger("change")

Respuesta #5

Usa eso :

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

O

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

O

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

El disparador puede ser cualquier evento que soporte JavaScript. Espero que sea fácil de entender para todos ustedes.

Artículos relacionados