Ajaxリクエストから動的に入力されるjQueryUIの並べ替え可能なリスト要素があります。
現在、ワークフローは進行中です
<li>
_要素はjQuery.empty()
呼び出しによって消去されます<li>
_リスト要素に挿入され、_<ul>
_リストに追加されます並べ替え可能なリストオブジェクト$("#avail_list").sortable( ... );
が与えられた場合、特定のリスト要素のdraggable
プロパティを無効にし、他の要素の既存の値に基づいて不透明度を0.5に設定したいと思います。
これを行うために、私は次の機能を持っています:
_var disabled = [];
var appendString = ""
if (avail.length > 0) {
for (var i = 0; i < avail.length; i++) {
//check if current list element exists in existing value list. True results
//in grayed out and non-draggable element
compareMatch = checkMatch(avail[i], compare);
if (compareMatch)
disabled.Push(list + "open_" + avail[i].id);
appendString += "<li id = "+ list + "open_" + avail[i].id +
" class = 'avail_list_element'><img class = 'logo' src = /static/images/vendor_logo/" + avail[i].icon + " /></li>"
}
$("#avail_list").append(appendString);
}
$("#avail_list").sortable("refresh");
if (disabled.length > 0)
disableDraggable(disabled);
function disableDraggable(elements){
for (var i = 0; i < elements.length; i++) {
console.log(elements[i])
$("#" + elements[i]).sortable("disable");
$("#" + elements[i]).fadeTo("fast", 0.5);
}
}
_
ただし、これによりエラーが発生します
_Error: cannot call methods on sortable prior to initialization;
attempted to call method 'disable'
_
要素を無効にする前にソート可能リストでrefresh
を呼び出したので、どうすればsortable
オブジェクトを初期化できないのですか?
任意の要素で.sortable()を呼び出すと、その要素の子が並べ替え可能になります。これは、子も.sortable()で初期化されるという意味ではありません。それらは、ドラッグできるソート可能なコンテナの一部にすぎません。
また、子要素で.sortable( 'disable')を呼び出しているため、.sortable()が子ではなく親で呼び出されているため、エラーが発生します。また、無効にする方法も正しくありません。
cancel property を使用して、これらの要素を並べ替えから除外します。ソート可能ファイルを初期化する場合は常に、このオプションを追加してください。
$("#avail_list").sortable({
cancel: ".disable-sort"
});
そして、無効にしたい要素にそのクラスを追加します。
function disableDraggable(elements){
for (var i = 0; i < elements.length; i++) {
$("#" + elements[i]).addClass("disable-sort");
$("#" + elements[i]).fadeTo("fast", 0.5);
}
}