ドラッグ可能なcancel
ウィジェットのメソッドを呼び出すことで、ドラッグ操作を元に戻すことができます (そのメソッドは文書化されていませんが、その名前はアンダースコアで始まっていないため、確実に使用することが「より安全」になります)。ただし、他のイベントは遅すぎて元に戻すアニメーションをトリガーできないため、イベント中にのみ機能します。start
ただし、並べ替え可能なウィジェットは、ドラッグ操作がキャンセルされた場合でもドロップを登録するため、新しく追加されたアイテムも削除する必要があります (イベントの発生が早すぎるstop
ため、イベント中に)。start
$("#yourSortable").sortable({
start: function(event, ui) {
if (!canDropThatVideo(ui.item)) {
ui.sender.draggable("cancel");
}
},
stop: function(event, ui) {
if (!canDropThatVideo(ui.item)) {
ui.item.remove();
// Show an error...
}
}
});
このフィドルで結果を確認できます(4 番目の項目は常に元に戻ります)。
更新: John Kurlak がコメントで正しく指摘しているように、 への呼び出しが原因でアイテムが元に戻るわけではありませんdraggable("cancel")
がui.sender
、null
私たちの場合はそうです。何かを投げても同じ動作になります。
ui.sender
残念ながら、私が試した他のすべての組み合わせでは、アニメーションが行われずにアイテムが元に戻されてしまうので、アクセスを避けて代わりに次のように書くのが最善の策かもしれません。
start: function(event, ui) {
if (!canDropThatVideo(ui.item)) {
throw "cancel";
}
}
ただし、キャッチされなかった例外は引き続きコンソールに表示されます。