Почему событие изменения jquery не срабатывает, когда я устанавливаю значение выбора с помощью val ()?

После быстрого google :

__STDC__ и __STDC_VERSION__, см. здесь

364
задан Kunj 16 March 2018 в 07:14
поделиться

9 ответов

Поскольку событие change требует фактического события браузера, инициированного пользователем, а не посредством кода JavaScript.

Сделайте это вместо:

$("#single").val("Single2").trigger('change');

или

$("#single").val("Single2").change();
571
ответ дан Milind Anantwar 16 March 2018 в 07:14
поделиться

Я полагаю, что вы можете вручную вызвать событие изменения с помощью trigger() :

$("#single").val("Single2").trigger('change');

Хотя почему оно не срабатывает автоматически, я понятия не имею.

44
ответ дан David Thomas 16 March 2018 в 07:14
поделиться

Добавление этого фрагмента кода после val (), похоже, работает:

$(":input#single").trigger('change');
9
ответ дан Eric Belair 16 March 2018 в 07:14
поделиться

Насколько я могу читать в API. Событие запускается только тогда, когда пользователь нажимает на опцию.

http://api.jquery.com/change/

Для полей выбора, флажков и переключателей событие вызывается немедленно, когда пользователь делает выделение мышью, но для других типов элементов событие откладывается до тех пор, пока элемент не потеряет фокус.

8
ответ дан Marnix 16 March 2018 в 07:14
поделиться

Чтобы упростить добавление пользовательской функции и вызов ее в любое время, когда изменение значения также вызывает изменение

$.fn.valAndTrigger = function (element) {
    return $(this).val(element).trigger('change');
}

и

$("#sample").valAndTirgger("NewValue");

, или вы можете переопределить значение val. функция, которая всегда вызывает изменение, когда вызывается val

(function ($) {
    var originalVal = $.fn.val;
    $.fn.val = function (value) {
        this.trigger("change");
        return originalVal.call(this, value);
    };
})(jQuery);

Пример на http://jsfiddle.net/r60bfkub/

6
ответ дан Alireza Fattahi 16 March 2018 в 07:14
поделиться

Если вы не хотите смешивать событие изменения по умолчанию, вы можете указать свое собственное событие

$('input.test').on('value_changed', function(e){
    console.log('value changed to '+$(this).val());
});

, чтобы вызвать событие при заданном значении, вы можете сделать

$('input.test').val('I am a new value').trigger('value_changed');
3
ответ дан codingrhythm 16 March 2018 в 07:14
поделиться

Я столкнулся с той же проблемой при использовании CMB2 с Wordpress и хотел подключиться к событию изменения метабокса загрузки файла.

Поэтому, если вы не можете изменить код, который вызывает изменение (в данном случае сценарий CMB2), используйте код ниже. Триггер вызывается ПОСЛЕ установки значения, в противном случае ваш changeHandler изменения будет работать, но значение будет предыдущим, а не установленным.

Вот код, который я использую:

(function ($) {
    var originalVal = $.fn.val;
    $.fn.val = function (value) {
        if (arguments.length >= 1) {
            // setter invoked, do processing
            return originalVal.call(this, value).trigger('change');
        }
        //getter invoked do processing
        return originalVal.call(this);
    };
})(jQuery);
2
ответ дан user2075039 16 March 2018 в 07:14
поделиться
$(":input#single").trigger('change');

Это сработало для моего сценария. У меня есть 3 комбо & amp; связать с событием chainSelect, мне нужно передать 3 значения по URL & amp; по умолчанию выберите все выпадающее. Я использовал это

$('#machineMake').val('<?php echo [110] 

Это сработало для моего сценария. У меня есть 3 комбо & amp; связать с событием chainSelect, мне нужно передать 3 значения по URL & amp; по умолчанию выберите все выпадающее. Я использовал это

[111]

И первое событие сработало.

GET['headMake']; ?>').trigger('change');

И первое событие сработало.

1
ответ дан Tom van der Woerdt 16 March 2018 в 07:14
поделиться

Если вы только что добавили опцию выбора в форму и хотите активировать событие изменения, я обнаружил, что требуется setTimeout, иначе jQuery не заберет вновь добавленное поле выбора:

window.setTimeout(function() { jQuery('.languagedisplay').change();}, 1);
1
ответ дан Dave Hilditch 16 March 2018 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: