2012-10-12 61 views
2

因此,我使用了相当不错的jQuery插件Chosen; http://harvesthq.github.com/chosen/jQuery选择插件 - 第一个选项不会触发更改事件?

我在做的事实际上是以两种或两种方式使用两种选择的样式下拉,即用户需要从一个或另一个中选择一个选项。

因此,当用户选择其中一个下拉菜单时,另一个(通过javascript)会被设置回其默认的禁用值。

这两个下拉列表均由一个隐藏参数支持,以实际保留所选值,而不管它来自哪个下拉列表。这是通过在.chosen().change()事件上的两个下拉列表中拥有听众来填充的。

唯一的问题是,当用户在下拉菜单中选择其中一个第一个选项时,它似乎不会触发“更改”事件,我猜想这看起来是已选择的选项,因此不是“更改”。但这两个下拉实际的第一个选项(即在jsp中)是一个禁用的选项与正常的“请选择”文本。

即使选择的选项已被选中,是否有办法触发更改事件?还是只有一个“选择”事件,即使没有变化也会触发?

回答

2

你可以在你的jQuery对象上使用.trigger(“change”)或.change()来手动触发change事件。

+0

问题是,选择的插件隐藏了很多。正常的选择对象并未实际显示,Chosen自己构建。 –

+0

但是,当我使用选择,我仍然可以触发我的实际选择object.Could事件请你显示你的代码? –

+0

他正在讨论在您更改值之后将$('#selectId')。change()更改为您的选择,以手动调用更改事件。 虽然我收到相同的错误。我使用jquery.val()来改变select的值。当我这样做,然后选择第一个选项时,它不会触发更改事件。如果我选择任何其他选项,但它会触发更改事件,并且如果我选择其他选项,然后选择第一个选项,它将触发更改事件。我认为手动设置.val()不是很有效。 – Samir

0

这为我工作:

//Get the dynamic id given to your select by Chosen 
var selId = $('your_select').attr('id'); 
//Use that id to remove the dynamically created div (the foe select box Chosen creates) 
$('#'+ selId +'_chzn').remove(); 
//Change the value of your select, trigger the change event, remove the chzn-done class, and restart chosen for that select 
$('#'+selId).val('your_new_value').change().removeClass('chzn-done').chosen(); 

在你的硬盘正在重置选择为您选择一言以蔽之。有可能比这更简单的方法,但这对我有效。

0

我刚刚有使用Select2插件(重新选择插件)相同的问题。

当我将Combobox声明为select2时,我忘记了“allowClear:true”这一行。

$('#selectLabelMap').select2({ 
        placeholder: "Sélectionner un label",     
        allowClear: true // <= don't forget "allowClear: true (re-init the comboBox) 
       }   
0

(DOM)准备就绪时,首次触发更改。

jQuery(function ($) { 

     $('#myselect').trigger("change"); 

    }); 
相关问题