script.aculo.us の Sortable は要素の更新時に再度設定する
以下のような html があったとします。
<ul id="sortable"> <li>あべし</li> <li>ひでぶ</li> </ul>
ここで sortable と名付けた ul 内の要素をドラッグ&ドロップで動かしたい場合に script.aculo.us の Sortable を使います。記述は省きますが prototype.js 等の必要なライブラリはロード済とします。
window.onload = function() { Sortable.create('sortable'); }
しかし、ここに後から要素を追加すると、そこは動かす事ができません。
window.onload = function() { Sortable.create('sortable'); // このタグは動かない new Insertion.Bottom('sortable', '<li>たわば</li>'); }
この場合、改めて Sortable.create() を使う事で、後から追加された要素も動くようになります。
window.onload = function() { Sortable.create('sortable'); new Insertion.Bottom('sortable', '<li>たわば</li>'); // 後から追加した要素もこれで動く Sortable.create('sortable'); }
create メソッドは内部で Sortable.destroy を呼んでいるので、更新時に特に以前の情報を気にする必要はありません。実際のコードでは、以下のような形になるでしょう。
<ul id="sortable"> <li>あべし</li> <li>ひでぶ</li> </ul> <input type="button" value="たわば" onclick="addTawaba();" />
window.onload = function() { Sortable.create('sortable'); } function addTawaba() { new Insertion.Bottom('sortable', '<li>たわば</li>'); Sortable.create('sortable'); }