2010-09-02 162 views
1

嘿所有,有没有什么办法来设置一个选择的价值,并让它的行为,如果它被用户更改? 我用设置一个选择值

$(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中使用。因此,在所谓的“大学”选择的变化事件中,我希望通过设置部门选择的价值,执行部门变更事件中的逻辑。

任何想法?

+0

这也许应该被标记使用JavaScript和你使用的库。看起来像jQuery给我。 – Armand 2010-09-02 16:17:51

回答

3

下面是解决你所描述的具体问题的资源:

jQuery val(val) and the absence of onChange firing (也,这里是文章的谷歌缓存版本的链接,因为该网站目前缓慢或无响应: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/

0

您是否尝试过从$('#university').change()拨打$('#department').change()

6

我原以为会触发#department更改事件处理程序。如下您可以手动触发它:

$('#university').change(function(){ 
    var selected = $("#university :selected").val(); 
    $('#department').val(selected); 
    $('#department').trigger('change'); 
});