Como disparar o evento de alteração do jQuery no código

177

Tenho um evento de alteração que está funcionando bem, mas preciso obtê-lo novamente.

Portanto, eu tenho uma função que é acionada na mudança que "alterará" outras listas suspensas com base em um seletor de classe (observe "lista suspensa S", pode haver mais de uma). Essa alteração de proxy não aciona a função e, portanto, falha. Como posso fazê-lo funcionar?

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

As sugestões até agora parecem funcionar, mas como o evento de mudança aciona uma postagem do ajax, agora parece falhar aqui. Eu vou brincar com isso, mas isso é algo para outra pergunta que eu sinto.

4imble
fonte
1
Forneça algum código para que possamos dar uma olhada #
Alex Rashkov 22/11/2010
Como podemos dizer como fazê-lo funcionar, se você não nos mostrou o que é?
user113716
1
Eu pensei que era um conceito simples e não senti o código necessário. As respostas até agora parecem ter entendido minha explicação e, portanto, estou tentando suas soluções agora. Se não tiver alegria, postarei algum código. Minha implementação é realmente muito mais complexa.
4imble
1
Classificado, houve um problema comigo alterando o valor após a postagem do ajax. Obrigado a todos pela ajuda. As sugestões postadas funcionaram como um encanto.
4imble

Respostas:

391

Use o método trigger ()

$(selector).trigger("change");
John Hartsock
fonte
4
Existe algum benefício nisso change()? Ou é apenas preferência?
Joshua Pinter
6
@ JoshPinter nenhum benefício real, mais uma preferência. Mas definitivamente mais fácil abstrair como parâmetro do que como nome de método.
John Hartsock
Definir um valor antes de realmente acionar o evento de alteração é a melhor maneira!
Kapil Yadav 18/03
33

para mim $('#element').val('...').change()é o melhor caminho.

Luis Carlos Steffens
fonte
Sim !, eu gosto deste
Juan Herrera
Sim! permite escolher a opção ao mesmo tempo. Eu acho que sua resposta merece ser a melhor aqui.
Sergej Fomin
20

A forma sem parâmetros do método change () aciona um changeevento. Você pode escrever algo como:

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

Use isso :

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

OU

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

OU

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

O acionador pode ser qualquer evento compatível com javascript. Espero que seja fácil de entender para todos.

Muhammad Fahad
fonte