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

177

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

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

Код

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

Похоже, что предложения пока работают, но поскольку событие change вызывает сообщение ajax, теперь оно, похоже, терпит неудачу. Я собираюсь поиграть с этим, но это другой вопрос, который я чувствую.

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

Ответы:

391

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

$(selector).trigger("change");
Джон Хартсок
источник
4
Есть ли польза от этого change()? Или это просто предпочтение?
Джошуа Пинтер
6
@JoshPinter никакой реальной выгоды, больше предпочтений. Но определенно проще абстрагироваться как параметр, чем имя метода.
Джон Хартсок
Установка значения до фактического запуска события изменения - лучший способ !!
Капил Ядав
33

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

Луис Карлос Штеффенс
источник
Да, мне нравится этот
Хуан Эррера
Да! это позволяет выбрать опцию одновременно. Я думаю, что ваш ответ заслуживает того, чтобы быть лучшим здесь.
Сергей Фомин
20

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

$(document).ready(function() {
    $("#yourInitialElementID").change(function() {
        // Do something here...
        $(".yourDropDownClass").change();
    });
});
Фредерик Хамиди
источник
8

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

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

ИЛИ

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

ИЛИ

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

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

Мухаммед Фахад
источник