繁体   English   中英

使用jquery ui通过拖放操作替换元素无法正常工作

[英]Replacing an element using jquery ui with drag and drop doesn't work properly

使用最新的jQuery UI,将元素从一个列表移动到另一个列表时,拖放功能无法正常工作。 我想将元素从一个列表拖到另一个列表中,然后将下垂的元素替换为另一个列表,问题是jquery UI替换了该元素,但它将其移动到列表的底部,但没有将其保持在其位置被丢弃。

    <head>
    <style>
    #list1{

        float:left;
        width: 200px;
        margin-right: 20px;
    }
    #list2{

        float:left;
        width: 200px;
    }    
    .element1{
        line-height:25px;
         width: 200px;
        margin-bottom:5px;
        margin-top:5px;
        background-color:#ededed;

    }
    .element2{
        line-height:25px;
         width: 200px;
        margin-bottom:5px;
        margin-top:5px;
        background-color:#ffeded;

    }  
    .highlight{
        border: 1px dashed #999999;
        color: #333333;
        height: 25px;
        background-color: #faffd6;

    }    
    </style>    
    </head>
    <body class="">

    <div id="wrapper">
       <div id="list1">
       <div class="element1">Element 1</div>
       <div class="element1">Element 2</div> 
       <div class="element1">Element 3</div>    
       <div class="element1">Element 4</div>    
       <div class="element1">Element 5</div>    
       <div class="element1">Element 6</div>    
       </div>   

       <div id="list2">
       <div class="element2">Element 1</div>
       <div class="element2">Element 2</div> 
       <div class="element2">Element 3</div>    
       <div class="element2">Element 4</div>    
       <div class="element2">Element 5</div>    
       <div class="element2">Element 6</div>    
       </div>   

    </div>
      <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
      <script src="https://code.jquery.com/ui/1.11.3/jquery-ui.min.js"></script>

    <script>
    $(window).load(function () {


        $("#list1").sortable({
        revert: true,
         placeholder: "highlight",

        });

        $("#list2").sortable({
        revert: true,
         placeholder: "highlight",

        });



        $( ".element1" ).draggable({
          connectToSortable: "#list2",
          revert: "invalid",  
        stop: function( event, ui ) {

         $(this).replaceWith('<div class="element1">Element 99</div>');

        }
        });


    });    
    </script>

您遇到的问题是您有两个不同的事件,而您仅捕获其中之一。

  1. 您从灰色列表中拖动项目并将其放置在粉红色列表中,将显示突出显示的元素,然后将其放下。 这是您的有问题的用法。
  2. 您从灰色列表中分级项目并将其放在粉红色列表中,将显示突出显示元素,然后将拖动的元素移到该列表之外(您仍然具有新列表项的边距,但是突出显示的元素是不在那里),然后将其放下。 这种情况很好。

您的问题是,在第一种情况下,拖动的元素位置(在DOM方向上)是列表的最后一个元素,当您将其拖放时,会发生的事情是使动画将其放置在正确的位置(其中高亮元素是地方),然后有一个开关。 如果更改该功能,则应在这些元素之间更改的功能将不知道要切换哪个元素。

解决此问题的方法是转到“可放置”元素-您将项目放入其中的列表。使用sortable#list2 )的deactivate事件在元素放置在正确位置运行所需的任何内容。

$("#list2").sortable({
    revert: true,
    placeholder: "highlight",
    deactivate: function(event, ui) {
        $(ui.item).replaceWith('<div class="element1">Element 99</div>');
    }
});

需要注意的使用event.toElement ,而不是this ,因为this在当前范围列表元素,而不是拖动的元素。 不要忘记从可拖动元素中删除stop事件的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM