2012-10-12 62 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"); 

    }); 
相關問題