2012-09-06 47 views
4

我正在使用jQueryUI multi-select Widget,它爲多重選擇繪製了一個不錯的下拉菜單小部件。將選定的項目移動到排序的多個選擇(Javascript)的頂部

我有一個已經排列(用戶名)多選這樣的:

<select multiple="multiple" name="users" id="id_users"> 
<option value="1" selected="selected">aaa</option> 
<option value="44">bbb</option> 
<option value="21" selected="selected">ccc</option> 
<option value="50">ddd</option> 
<option value="16">eee</option> 
<option value="25" selected="selected">fff</option> 
</select> 

我想保留用戶名排序,但移動所選項目到列表頂部,每次用戶打開下拉式菜單。因此,在這個例子中,新秩序必須是:

<select multiple="multiple" name="users" id="id_users"> 
<option value="1" selected="selected">aaa</option> 
<option value="21" selected="selected">ccc</option> 
<option value="25" selected="selected">fff</option> 
<option value="44">bbb</option> 
<option value="50">ddd</option> 
<option value="16">eee</option> 
</select> 

從窗口小部件的網站上,我看到它有一個返回所選項目的陣列的方法,它有beforeopen的事件。所以我認爲我可以通過在打開之前處理事件來管理排序(使用該數組),但是我對JavaScript很陌生,任何人都可以將我指向正確的方向嗎?

我在這裏搜索,我找到的所有解決方案解決了「排序文本」(這不是我所需要的)問題。

編輯:我解決了這種方式:

$('#id_users').multiselect({ 
    beforeopen: function(event, ui) { 
     $('#id_users option:selected').prependTo('#id_users'); 
     $('#id_users').multiselect('refresh'); 
    } 
}); 

所以在widget的初始化,我的代碼,這兩條線綁定到beforeopen事件。 在beforeopen的處理中,我將所選項目添加到其他項目中,並刷新窗口小部件(因爲它僅讀取一次多重選擇,並且即使HTML更改也不會刷新順序)。

我不能滿意答案,因爲我沒有足夠的聲望。但是,謝謝!

回答

4

試試這個。

$('#id_users option:selected').prependTo('#id_users') 

+0

是的,(在beforeopen事件處理程序)的作品。 HTML反映了我想要的更改,但jquery-ui小部件按名稱排序,它已經是解決方案的一半。謝謝! – rusco

相關問題