Вы можете очень легко переопределить функцию val
, чтобы вызвать изменение, заменив его прокси к исходному val
функции.
просто добавить этот код где-то в документе (после загрузки JQuery)
(function($){
var originalVal = $.fn.val;
$.fn.val = function(){
var result =originalVal.apply(this,arguments);
if(arguments.length>0)
$(this).change(); // OR with custom event $(this).trigger('value-changed');
return result;
};
})(jQuery);
Рабочий пример: here
(Обратите внимание, что это всегда будет вызывать change
когда val(new_val)
называется, даже если значение Didn Фактически это изменилось.)
Если вы хотите активировать изменение ТОЛЬКО при фактическом изменении значения, используйте его:
//This will trigger "change" event when "val(new_val)" called
//with value different than the current one
(function($){
var originalVal = $.fn.val;
$.fn.val = function(){
var prev;
if(arguments.length>0){
prev = originalVal.apply(this,[]);
}
var result =originalVal.apply(this,arguments);
if(arguments.length>0 && prev!=originalVal.apply(this,[]))
$(this).change(); // OR with custom event $(this).trigger('value-changed')
return result;
};
})(jQuery);
Живой пример для этого: http://jsfiddle.net/5fSmx/1/
возможно дубликат (http://stackoverflow.com/questions/ 2247386/jquery-textbox-valxxxx-not-cause-change-to-fire) – 2012-06-04 17:40:31
Сам заголовок ответил на мой вопрос. Подтверждено в ** [.change()] (https://api.jquery.com/change/) ** желтый "Примечание: изменение значения элемента ввода с использованием JavaScript с использованием .val(), например, т огонь события ". –