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


1
Предоставьте код, чтобы мы могли взглянуть
Алексей Рашков

Как мы можем рассказать вам, как заставить его работать, если вы не показали нам, что это такое?
user113716

1
Я думал, что это простая концепция и не чувствовал, что код требуется. Ответы до сих пор, кажется, поняли мое объяснение, и поэтому я пробую их решения сейчас. Если у меня нет радости, я выложу код. Моя реализация на самом деле намного сложнее.
4imble

1
Разобрался, была проблема со мной, меняющим значение после поста ajax. Спасибо всем за помощь. Отправленные предложения работали как шарм.
4imble

Ответы:


391

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

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

4
Есть ли польза от этого change()? Или это просто предпочтение?
Джошуа Пинтер

6
@JoshPinter никакой реальной выгоды, больше предпочтений. Но определенно проще абстрагироваться как параметр, чем имя метода.
Джон Хартсок

Установка значения до фактического запуска события изменения - лучший способ !!
Капил Ядав


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. Надеюсь, что это легко понять всем вам.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.