Вот ресурс, который решает точную проблему, которую вы описываете:
jQuery val (val) и отсутствие включения onChange
(также, вот ссылка на кешированную версию статьи в Google, поскольку в данный момент сайт работает медленно или не отвечает: jQuery val (val) и отсутствие срабатывания onChange (Cached) )
Подводя итог, нельзя сказать, что нет надежного кросс-браузерного метода искусственного запуска фактического события браузера. В частности, IE и Firefox реализуют событие по-разному, поэтому для кросс-браузерной библиотеки, такой как jQuery, было бы невозможно точно воспроизвести событие.
Таким образом, типичный подход состоит в том, чтобы вручную запускать обработчик событий, назначенный вами через jQuery. По вышеупомянутым причинам это фактически не вызывает событие, а просто вызывает назначенную функцию обработчика.
Вы можете, как предложил Пэт, вручную вызвать событие, используя либо $('#department').trigger('change');
, либо функцию быстрого вызова $('#department').change();
(оба имеют одинаковый эффект). Статья, на которую я ссылался выше, также предлагает креативное решение. Вместо того, чтобы каждый раз вручную запускать событие, если вы хотите сделать это несколько раз, просто расширьте jQuery следующим образом:
(function($) {
$.fn.valChange = function(newValue) {
return this.each(function() {
var obj = $(this);
obj.val(newValue);
obj.change();
});
};
})(jQuery);
Затем, когда вы хотите изменить значение, используйте функцию valChange()
вместо стандартной val()
. Короче говоря, это означает, что нужно изменить значение с помощью стандартной функции val()
, а затем вызвать событие изменения.
Вот живая демонстрация всего этого в действии: http://jsfiddle.net/rXEPW/