爲什麼不使用正常複選框與jQuery-UI Sortable?
<ul id="sortable" class='ckb-list'>
<li><input id="chb-1" type="checkbox" value="1"/> Checkbox 1</li>
<li><input id="chb-2" type="checkbox" value="2"/> Checkbox 2</li>
<li><input id="chb-3" type="checkbox" value="3"/> Checkbox 3</li>
<li><input id="chb-4" type="checkbox" value="4"/> Checkbox 4</li>
<li><input id="chb-5" type="checkbox" value="5"/> Checkbox 5</li>
</ul>
,然後應用
$(function() {
// sortable methods
$("#sortable").sortable();
$("#sortable").disableSelection();
// retrieve selection list
$(".btn-save").bind("click", function() {
var ids = "",
iBox = 0;
// foreach input in .ckb-list
$(".ckb-list li > input").each(function() {
if($(this).prop("checked")) {
// it checked, so, we save
ids += ++iBox + ". " + $(this).attr("id") + "\n";
}
});
alert("the checkboxes selected and sorted are:\n\n" + ids);
});
});
Live example in JSBIN
您可以輕鬆地轉換<input id="chb-5" type="checkbox" value="5"/> Checkbox 5
剃刀語法:
@Html.Checkbox("chb-5", Model.CheckBox5Value)
的持久性,所有你需要做的就是寫HTML是正確的順序,讓我們的形象,你有這個表:
[TblUserOptions]
UserOption_id
Option_id
Value
Order
所有你需要做的是:
<ul id="sortable" class='ckb-list'>
@foreach(var option in Model.TblUserOptions
.OrderBy(x => x.Order)
.ThenByDescending(x => x.Option_id))
{
<li>@Html.Checkbox("chb-" + option.Option_id, option.Value)</li>
}
</ul>
你會始終有複選框在開始時正確排序,保存所有您需要做的是循環遍歷所有複選框並更新新值Order
值。
感謝您的建議!我在提問之前承認我不考慮排序。這是因爲我想找到一個方便的控制,它會在後退後繼續進行更改。爲了使持久性可分類的作品,我可能需要使用cookie,我記得我曾經嘗試過用不同的瀏覽器得到的糟糕結果... – abis
我沒有在我的問題中提到持久性作爲要求。那麼,如果有附加要求,可排序仍然是一個不錯的選擇? – abis
我總是會去那裏,如果你需要持久化,只需要在添加'checkbox'時在'@ foreach'語句中寫入正確的順序。在「保存」後,您會將訂單保存在您的數據庫中,對嗎?所以當你加載它時會有一個命令,只需使用該命令來創建HTML。沒有必要使用cookie。 – balexandre