嘿,有什么方法可以设置一个select的值并让它看起来像是被用户更改了一样?
我用过

$(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);
    });
});

基本上,当选择大学时,它的值是部门id,然后在url中使用。因此,在名为“university”的select的更改事件中,我希望通过设置department select的值,执行department的更改事件中的逻辑。
有什么想法吗?

最佳答案

这里有一个资源可以解决您描述的问题:
jQuery val( val ) and the absence of onChange firing
(另外,这里还有一个链接指向文章的Google缓存版本,因为该站点目前要么很慢要么没有响应:jQuery val( val ) and the absence of onChange firing (Cached)
综上所述,目前还没有可靠的、跨浏览器的人为触发实际浏览器事件的方法。具体来说,IE和Firefox实现事件的方式不同,因此jQuery这样的跨浏览器兼容库不可能忠实地再现事件。
因此,典型的方法是手动触发通过jQuery分配的事件处理程序。出于前面提到的原因,这实际上不会触发事件,而只是调用分配的处理程序函数。
正如Pat建议的那样,您可以使用$('#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/

关于javascript - 设置选择值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3629045/

10-16 22:40