3

ソート可能なリストがあります。並べ替えを開始する前に、そのリストのすべての要素が有効かどうかを確認したいと思います。そうでない場合は、イベントをキャンセルしてリストをそのままにしておきます。

ここでコードを見つけることができます http://jsfiddle.net/DZYW5/4/

これを使用すると、イベントはキャンセルされますが、要素は削除されます。

start: function (event, ui) {
    if (!valid()) {
        return false;
        // it cancel's but the element is removed...
    }
}

たぶん、「beforeStart」イベントを実装する必要がありますか? 提案?

4

2 に答える 2

5

jQuery UI のバグにぶつからずにソートをキャンセルする唯一の方法は、ソートを非同期にキャンセルすることです。

他の人が提案したように停止オプションを使用することは、ユーザーが最初に画面上でアイテムをドラッグし、完了したらキャンセルできるため、受け入れられません。これは、特定のアイテムのドラッグを「防止」するというOPの当初の懸念を満たしません。

ソート イベント中にソート可能をキャンセルしようとすると、jQuery UI でエラーが発生します。のようなエラーUncaught TypeError: Cannot read property '0' of null

ユーザーがドラッグを開始すると、画面に短いフラッシュが表示されます。しかし、ドラッグはすぐにキャンセルされ、JS エラーは発生しません。

var isCancel = false;
element.sortable({
    start: function() { isCancel = false; },
    sort: function(event, ui) {      // prevent dragging if row has dynamically assigned class
	if (ui.item.hasClass('no-drag')) {
	    isCancel = true;
	    // allow current jQuery UI code to finish runing, then cancel
	    setTimeout(function() {
		element.sortable('cancel');
	    }, 0);
	}
    },
    stop: function() {
    	if (isCancel) return;
    	// your normal processing here
    },
});

于 2016-06-10T16:04:48.850 に答える