Как вызвать событие изменения jQuery в коде - PullRequest
164 голосов
/ 22 ноября 2010

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

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

Код

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

Ответы [ 5 ]

359 голосов
/ 22 ноября 2010

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

$(selector).trigger("change");
23 голосов
/ 30 января 2015

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

20 голосов
/ 22 ноября 2010

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

$(document).ready(function() {
    $("#yourInitialElementID").change(function() {
        // Do something here...
        $(".yourDropDownClass").change();
    });
});
8 голосов
/ 19 января 2016
$(selector).change()

.change ()


.trigger («изменение»)

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

.trigger («изменение»)

$(selector).trigger("change")
4 голосов
/ 16 февраля 2016

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

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

ИЛИ

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

ИЛИ

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...