2010-09-02 192 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'); 
});