Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于条件的jQuery可拖动还原_Javascript_Jquery_Jquery Ui_Jquery Plugins - Fatal编程技术网

Javascript 基于条件的jQuery可拖动还原

Javascript 基于条件的jQuery可拖动还原,javascript,jquery,jquery-ui,jquery-plugins,Javascript,Jquery,Jquery Ui,Jquery Plugins,我有一个与jQuery相关的问题,可以拖动和拖放。这是我想做的事情 首先:我有两个div。一个是,另一个是。“容器”有10个,可拖放到“选定”中。以下是代码: <div id="selected"> <ul class="sortable-list"> </ul> </div> <div id="container"> <ul class="sortable-list">

我有一个与jQuery相关的问题,可以拖动和拖放。这是我想做的事情

首先:我有两个div。一个是
,另一个是
。“容器”有10个
  • ,可拖放到“选定”中。以下是代码:

    <div id="selected">
        <ul class="sortable-list">
        </ul>
    </div>
    
    
    <div id="container">
        <ul class="sortable-list">
                 <li>1</li>
                 <li>2</li>
                 <li>....</li>
                 <li>9</li>
                 <li>10</li>
        </ul>
    </div>
    
    这很好用

    Third:但是当我将
  • 从“selected”拖动到“container”时,“selected”div将只有4个
  • s。所以在这种情况下,稍后用户应该能够从“container”div向“selected”div添加另一个
  • 。但不幸的是,它不起作用。由于
    if(total>=5)
    条件,我尝试拖放到“selected”中的所有
  • 都被还原


    有人能帮我解决这个问题吗?请……

    首先,将
    还原设置为false将完全禁用还原功能。正如你所指出的,你可以把拖拽物扔到任何地方。您通常需要的是
    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');
           }
        }
    });
    
    $("#selected ul").droppable({
        accept: function() {
            return $("#selected li").length < 5;
        }
    });
    
    您可以使用,它需要一个函数来更轻松地执行此操作,如下所示:

    $('#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');
           }
        }
    });
    
    $("#selected ul").droppable({
        accept: function() {
            return $("#selected li").length < 5;
        }
    });
    
    $(“#选定ul”)。可拖放({
    接受:函数(){
    返回$(“#所选li”)。长度<5;
    }
    });
    

    。当你拖出元素时,
    .length
    会下降,它会再次接受元素……没有理由变得更复杂:)

    @Nick Craver:是的,它正在工作。这里的新问题是,我可以看到我正在将LI元素从“container”拖到“selected”。但在将LI从选定对象拖动到容器时,似乎并没有拖动元素。但最后,我可以看到LI从selected移动到container。有什么解决方案可以在从选定项拖动到容器时看到拖动效果吗?@lakum4stackof-你应该已经得到了效果,你还在添加/删除可拖动的任何位置吗?@Nick Craver-我没有看到从选定项拖动回容器div时的拖动效果。但最后,因此,我将LI从selected div移动到container div,并且每次LI都被添加到LI列表的末尾。@lakum4stackof-ooh,我明白你的意思,给你:@Nick Craver-嘿,亲爱的,每当我将LI从container拖放到selected或selected到container时,它总是将LI拖放到整个LI列表的末尾。我不能把它放在两个元素之间。有什么解决办法吗?