2012-11-20 76 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

相关问题