Як запустити в коді подію зміни 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);
        }
    }
}

Пропозиції поки що, здається, спрацьовують, але оскільки подія зміни викликає повідомлення про аякс, зараз, здається, тут не виходить. Я збираюся пограти з цим, але це щось для іншого питання, яке я відчуваю.


1
Надайте код, щоб ми могли подивитися
Олексій Рашков

Як ми можемо сказати вам, як змусити його працювати, коли ви не показали нам, що це таке?
користувач113716

1
Я думав, що це проста концепція, і не відчуваю, що код потрібен. На сьогодні відповіді, схоже, зрозуміли моє пояснення, і тому я зараз намагаюся їх вирішити. Якщо я не буду радіти, я опублікую якийсь код. Моя реалізація насправді набагато складніша.
4imble

1
Упорядкувавши це, було проблемою, коли я змінив значення після публікації в ajax. Дякую всім за допомогу. Опубліковані пропозиції спрацювали як шарм.
4imble

Відповіді:


391

Скористайтеся методом тригер ()

$(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.