Установка выбранного значения - PullRequest
1 голос
/ 02 сентября 2010

Привет всем, есть ли способ установить значение выбора и заставить его действовать так, как если бы он был изменен пользователем?Я использовал

$(document).ready(function(){
    $('#department').change(function(){
        $('#academicbody').hide();
        var selected = $("#department :selected").val();
        $('#progrmmehome').load('/email/programmelist/'+selected);
    });
    $('#university').change(function(){
        var selected = $("#university :selected").val();
        $('#department').val(selected);
        $('#progrmmehome').load('/email/programmelist/'+selected);
    });
});

в основном, когда выбран университет, его значением является идентификатор отдела, который затем используется в URL.Таким образом, в событии изменения выбора, названном «университет», я надеялся, установив значение выбора отдела, логика в событии изменения для отдела будет выполнена.

Ответы [ 3 ]

6 голосов
/ 02 сентября 2010

Я бы подумал, что это также вызовет обработчик события изменения #department.Вы можете вручную запустить его следующим образом:

$('#university').change(function(){
    var selected = $("#university :selected").val();
    $('#department').val(selected);
    $('#department').trigger('change');
});
3 голосов
/ 02 сентября 2010

Вот ресурс, который решает точную проблему, которую вы описываете:

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/

0 голосов
/ 02 сентября 2010

Вы пытались звонить $('#department').change() из $('#university').change()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...