После быстрого google :
__STDC__
и __STDC_VERSION__
, см. здесь
Поскольку событие change
требует фактического события браузера, инициированного пользователем, а не посредством кода JavaScript.
Сделайте это вместо:
$("#single").val("Single2").trigger('change');
или
$("#single").val("Single2").change();
Я полагаю, что вы можете вручную вызвать событие изменения с помощью trigger()
:
$("#single").val("Single2").trigger('change');
Хотя почему оно не срабатывает автоматически, я понятия не имею.
Добавление этого фрагмента кода после val (), похоже, работает:
$(":input#single").trigger('change');
Насколько я могу читать в API. Событие запускается только тогда, когда пользователь нажимает на опцию.
Для полей выбора, флажков и переключателей событие вызывается немедленно, когда пользователь делает выделение мышью, но для других типов элементов событие откладывается до тех пор, пока элемент не потеряет фокус.
Чтобы упростить добавление пользовательской функции и вызов ее в любое время, когда изменение значения также вызывает изменение
$.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/
Если вы не хотите смешивать событие изменения по умолчанию, вы можете указать свое собственное событие
$('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');
Я столкнулся с той же проблемой при использовании 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);
$(":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');
И первое событие сработало.
Если вы только что добавили опцию выбора в форму и хотите активировать событие изменения, я обнаружил, что требуется setTimeout, иначе jQuery не заберет вновь добавленное поле выбора:
window.setTimeout(function() { jQuery('.languagedisplay').change();}, 1);