Cómo activar el evento de cambio de jQuery en el código


177

Tengo un evento de cambio que funciona bien pero necesito que vuelva a aparecer.

Por lo tanto, tengo una función que se activa en el cambio que "cambiará" otros menús desplegables en función de un selector de clase (observe "menús desplegables S", podría haber más de uno). Este cambio de proxy no activa la función y 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 a medida que el evento de cambio desencadena una publicación ajax, ahora parece fallar aquí. Voy a jugar con eso, pero eso es algo para otra pregunta que siento.


1
Proporcione un código para que podamos echar un vistazo
Alex Rashkov

¿Cómo podemos decirle cómo hacer que funcione, cuando no nos ha mostrado lo que es?
user113716

1
Pensé que era un concepto simple y no sentí que se requería código. Las respuestas hasta ahora parecen haber entendido mi explicación y ahora estoy probando sus soluciones. Si no tengo ninguna alegría, publicaré un código. Mi implementación es en realidad mucho más compleja.
4imble

1
Lo solucioné, fue un problema para mí cambiar el valor después de la publicación ajax. Gracias por toda la ayuda. Las sugerencias publicadas funcionaron como un encanto.
4imble

Respuestas:


391

Use el método trigger ()

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

44
¿Hay algún beneficio para esto change()? ¿O es solo preferencia?
Joshua Pinter

66
@JoshPinter sin beneficio real, más una preferencia. Pero definitivamente es más fácil de abstraer como parámetro que como nombre de método.
John Hartsock

¡Establecer un valor antes de activar el evento de cambio es la mejor manera!
Kapil Yadav


20

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

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


8

Usa eso :

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

O

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

O

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.