I found a solution for this problem. Your code was not so far from my decision.
The idea is to use the change option to show / hide the placeholder depending on its position and to cancel the fall if the position is the first.
Code ( jsFiddle here ):
var cancelRequired = false; $("#sortable1").sortable({ placeholder: "sortable-placeholder", change: function(event, ui) { if (ui.placeholder.index() < 1) { $(ui.placeholder).css('display', 'none'); } else { $(ui.placeholder).css('display', ''); } }, beforeStop: function(event, ui) { cancelRequired = (ui.placeholder.index() <= 1); }, stop: function() { if (cancelRequired) { $(this).sortable('cancel'); } } });
The hack used in beforeStop and stop is due to an error when trying to cause cancellation directly inside beforeStop . More info here that send me to this link .
This code has been tested with jQuery 1.8.2 and jQuery-ui 1.9.2
source share