jQuery draggable revert基于条件
我有一个与jQuery draggable和droppable相关的问题。 这是描述我想要做的事情。
第一:我有两个div。 一个是
,另一个是
。 “container”有10个
,可以拖动并可以放入“选中”。 这是代码:
- 1
- 2
- ....
- 9
- 10
第二:我想允许从“容器”到“选定”div的任何5
s。 如果有人试图添加第6个
,那么它一定不允许用户使用它。 那个将要插入“selected”的第6个
必须使用jQuery draggable选项revert来恢复 。
ie $("#container li").draggable({ revert: true });
这是javascript代码。
$(document).ready(function(){ var total = 0; $("#selected").droppable({ drop: function() { total = $("#selected li").length; //alert(total); if (total >= 5) { $("#container li").draggable({ revert: true }); } else { // below code is not working $("#container li").draggable({ revert: false }); // this is making whole feature weird. I can drag all the anywhere } } }); });
这工作正常。
第三:但是当我将
从“selected”拖到“container”时,“selected”div只有4个
s。 所以在这种情况下,以后用户应该能够从“容器”div中将另一个
添加到“selected”div中。 但不幸的是它没有用。 由于if (total >= 5 )
条件,我尝试拖放到“已选择”的所有
s都被恢复。
任何人都可以帮助我使用可拖动的还原选项来解决这个问题吗? 请…
您可以使用accept
选项 ,它可以更轻松地执行此操作,如下所示:
$("#selected ul").droppable({ accept: function() { return $("#selected li").length < 5; } });
你可以在这里测试一下 。 当你拖出元素时, .length
会下降,它会再次接受元素......没有理由让任何更复杂的:)
首先,将revert
设置为false将完全禁用恢复function。 正如您所指出的那样,您可以将拖动器放在任何地方。 你通常想要的是revert: 'invalid'
,这意味着它会在任何不属于接受它的可放置的东西上掉落时恢复。
你想做什么应该是这样的:
$('#selected').droppable({ drop: function() { // since you're doing a full re-calc every time, this doesn't need to be global var total = $("#selected li").length; if(total >= 5) { // once you've reached five, simply don't accept any more elements // the rest will revert if dropped here $('#selected').droppable('disable'); } } });