2012-11-20 73 views
0

好的。沒有人在傾聽我的意見,所以我會嘗試通過向您顯示您想做的工作代碼而不是我想要的方式來改述問題。以編程方式更改選擇選項事件

注:我不問如何做到這一點。我問更像是......什麼是最好的方式......

 
// First I need the proper value 
$select.find("option:selected").prop("selected", false); 
$select.find("option:first").prop("selected", true); 

// Now I need the event to fire 
$select.trigger("change"); 

我想這樣做在同一行,但...類似的代碼,在這個問題上的最後一行。

請不要告訴我任何事情,你會期望有人已經做了10年前的東西知道。

ORIGINAL - 根據以下

DONT回答沒有真的要jQuery的,但我使用它,所以它很可能會成爲。

基本上,我想要做的是說

var $option = $select.find("option:first"); 
$option.trigger("click"); 

但是,這並不真正發揮作用。我的意思是,它像是做,但它似乎並沒有也火上的選擇更改事件......所以我想我實際上應該做更多的東西一樣......

 
$select.triggerEvent(new Event({ 
    type : "change", 
    target : $option 
}); 

但那是不對的。

+1

如果你想選擇一個選項,您可以用'prop'方法,'$ option.prop(「選擇」,真正的);' – undefined

+0

爲什麼它一定是通過選項事件? – rayfranco

+0

'$ select.children()。first()。prop('selected',true);' – adeneo

回答

1

使用.val()改變select下拉值:

$select.val($select.find('option:first').val()); 
0

可以使用.attr方法

var $option = $select.find("option:first"); 
$option.attr('selected', true); 

使用.val()的選擇

var $option = $select.find("option:first").val(); 
$select.val($option); 
0

你可以使用道具()jQuery的方法如下:

$select.find('option:first').prop('selected',true); 

這是semantically作爲選擇設置選項,以正確的方式,它也似乎是正確的方式set properties in jQuery since 1.6

如果您在1之前使用jQuery 。6,你應該做的,而不是:如果您需要觸發您的選擇更改事件

$select.find('option:first').attr('selected',true); 

,你可以這樣做:

$select.find('option:first').prop('selected',true); 
$select.change(); 

這裏是a working example

如果您需要做到這一點,你可以在某些方面擴展jQuery (未測試代碼)

;(function($){ 
    $.fn.changeToOption = function(n) { 

     var option; 

     option = this.find('option').eq(n); 

     if (option.prop('selected',true)) { 
      this.change(); 
     } 

     return this; 

    } 
})(jQuery) 

,然後簡單地說:

$select.changeToOption(0); 
+0

嗯。奇怪的是,這是有效的。也許這是因爲我的用例中實際發生的所有額外複雜性......這是在骨幹視圖中將委派的事件附加到包裝在jquery小部件中的select中。 – adiktofsugar

+0

@adiktofsugar爲什麼不爲骨幹相關視圖觸發自己的骨幹事件? (順便說一句,這回答你的原始問題) – rayfranco

+0

@adiktofsugar並做「奇怪的,這有效」意味着這對你有用嗎? – rayfranco

相關問題