Как вызвать событие изменения jQuery в коде

У меня есть событие изменения, которое работает нормально, но мне нужно, чтобы оно повторялось.

Итак, у меня есть функция, которая запускается при изменении, которое изменяет другие раскрывающиеся списки на основе селектора класса (обратите внимание на раскрывающийся список, их может быть несколько). Это изменение прокси не запускает функцию и поэтому не работает. Как заставить его работать?

Код

$(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, теперь, похоже, здесь не работает. Я собираюсь поиграться с этим, но это уже другой вопрос, который я чувствую.


person 4imble    schedule 22.11.2010    source источник
comment
Предоставьте код, чтобы мы могли посмотреть   -  person Alex Rashkov    schedule 22.11.2010
comment
Как мы можем рассказать вам, как заставить его работать, если вы не показали нам, что это?   -  person user113716    schedule 22.11.2010
comment
Я думал, что это простая концепция, и я не чувствовал необходимости в коде. Ответы до сих пор, кажется, поняли мое объяснение, и поэтому сейчас я пробую их решения. Если не будет радости, выложу код. Моя реализация на самом деле намного сложнее.   -  person 4imble    schedule 22.11.2010
comment
Сортировал его, у меня была проблема с изменением значения после сообщения ajax. Спасибо всем за помощь. Опубликованные предложения работали как шарм.   -  person 4imble    schedule 22.11.2010


Ответы (5)


Используйте метод trigger ()

$(selector).trigger("change");
person John Hartsock    schedule 22.11.2010
comment
Есть ли польза от этого по сравнению с change()? Или это просто предпочтение? - person Joshua Pinter; 13.10.2015
comment
@JoshPinter никакой реальной выгоды, скорее предпочтение. Но определенно проще абстрагироваться как параметр, чем как имя метода. - person John Hartsock; 28.10.2015
comment
Установка значения перед фактическим запуском события изменения - лучший способ !! - person Kapil Yadav; 18.03.2020
comment
Последние версии jQuery (3 атм) выдают предупреждение при использовании устаревшего сокращения .change(). Вместо этого вы должны использовать .trigger('change'). - person Tim; 21.07.2021

для меня $('#element').val('...').change() это лучший способ.

person Luis Carlos Steffens    schedule 30.01.2015
comment
Да, мне нравится этот - person Juan Herrera; 14.05.2016
comment
Да! это позволяет выбрать вариант одновременно. Я думаю, что ваш ответ заслуживает быть здесь лучшим. - person Sergej Fomin; 19.09.2017
comment
Это единственный способ вызвать событие изменения при программном изменении значения элемента. - person CodeMantle; 26.07.2020
comment
теперь это устарело. все лучшие функции, необходимые для разработки, устаревают ... разве это для того, чтобы разработчик постоянно узнавал что-то новое? - person Amit Shah; 24.03.2021

Форма без параметров метода change () запускает событие change. Вы можете написать что-то вроде:

$(document).ready(function() {
    $("#yourInitialElementID").change(function() {
        // Do something here...
        $(".yourDropDownClass").change();
    });
});
person Frédéric Hamidi    schedule 22.11.2010
comment
этот метод не устаревает. - person Amit Shah; 24.03.2021

$(selector).change()

.change ()


.trigger ("изменение")

Более длинная более медленная альтернатива, лучше для абстракции.

.trigger ("изменение")

$(selector).trigger("change")
person Geoffrey Hale    schedule 19.01.2016

Используйте это:

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

OR

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

OR

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

Триггером может быть любое событие, поддерживаемое javascript. Надеюсь, вам будет легко это понять.

person Muhammad Fahad    schedule 16.02.2016