【问题标题】:Jquery Drag and Drop on Sortable可排序的 Jquery 拖放
【发布时间】:2018-04-02 10:00:01
【问题描述】:

我需要帮助才能使用拖放功能。我有一个表单生成器,其工作方式如下。您将字段集从左侧列表拖放到“工作区”中。您可以将多个字段集拖放到工作区中,然后对它们进行重新排序/排序。进入工作区后,您可以将左下方菜单中的“字段”拖放到刚刚放入工作区的字段集中。

我希望能够将已删除的字段从一个字段集中移动到工作区内的另一个字段集中。例如,我在错误的字段集中放置了一个字段并想要移动它。但是,一旦将字段放入字段集中,我就无法移动该字段。请帮我弄清楚我做错了什么。 Fsfiddle 链接和代码如下。

Jsfiddle link

$(document).ready(function() {
    var fs_count = 0;
  $("#drop-area").droppable({
    accept: '.ui-draggable:not(.draggableField)',
    drop: function(event, ui) {
        fs_count++;
      var clone = $(ui.draggable).clone()
      clone.addClass('.connectedSortable')
      // clone.removeClass('.ui-draggable');
      if (clone.hasClass('dropped')) {
            return false;
        }
        clone.addClass('.connectedSortable').addClass('dropped').attr('id', 'fs_' + fs_count);
      $(this).append(clone);

      var fieldsDroppable = $('#drop-area .ui-draggable:last-child .fieldDroppable');
      fieldsDroppable.droppable({
      accept: '.draggableField',
          drop: function(event, ui) {
              var clone = $(ui.draggable).clone();
              $(this).append(clone);
          }
});

    }
  });

    $(".fieldDroppable").droppable({
    accept: '.draggableField',
    drop: function(event, ui) {
      var clone = $(ui.draggable).clone()
      $(this).append(clone);
    }
  });

  $(".ui-draggable").draggable({
    opacity: 1.0,
    helper: 'clone',
    revert: 'invalid'
  });
    $(".draggableField").draggable({
    opacity: 1.0,
    helper: 'clone',
    revert: 'false'
  });

  $("#drop-area").sortable({ 
    handle: '.drag-handle',
    update: function () { //triggered when sorting stopped
    var dataAuto = $("#drop-area").sortable("serialize", {
            key: "za",
            attribute: "id",
        });
            alert(dataAuto);  
    }
  });

  $("#drop-area").disableSelection();

});

【问题讨论】:

    标签: jquery css jquery-ui jquery-ui-sortable jquery-ui-draggable


    【解决方案1】:

    你可以做的一件事。对于放入工作区域中的字段集中的所有字段,添加一个删除按钮,该按钮删除该特定字段集中的特定字段,稍后您可以在另一个字段集中添加相同的字段。

    【讨论】:

    • A,field 可能已配置并绑定到函数,因此删除它可能是个问题。我希望弄清楚如何将其拖放到其他字段集。
    • 在将字段拖到工作场所时,您会将其绑定到某些事件,删除时会遇到什么问题?您始终可以在重新删除相同字段的同时附加相同的事件。
    • 该字段最终将包含一个表单字段。该表单字段具有将被自定义并保存到数据库的属性。然后,该自定义字段提供一个合同生成脚本,该脚本查找该特定字段并根据自定义字段属性运行脚本。删除它会破坏下游流程。
    • 应该提一下,表单构建完成后,会保存到数据库中。我正在构建的这个脚本最终也将用于修改保存的表单。
    【解决方案2】:

    好的,请查看此答案

    <div id="draggable" class="ui-widget-content ui-draggable ui-draggable-handle" >
        <p>Drag me to my target</p>
    </div>
    
    <div id="droppable" class="ui-widget-header" style="height: 300px;width: 300px;">
        <div id="droppable1" class="ui-widget-header ui-droppable" style="height: 150px;">
            <p>Cleared!</p>
        </div>
        <div id="droppable2" class="ui-widget-header ui-droppable ui-state-highlight" style="height: 150px;">
            <p>Dropped!</p>
        </div>
    </div>
    

    这里是js

    $( "#draggable" ).draggable();
    $( "#droppable1, #droppable2" ).droppable({
        out: function( event, ui ) {
            $( this ).removeClass( "ui-state-highlight" ).find( "p" ).html( "Cleared!" );
        },
        drop: function( event, ui ) {
            $( this ).addClass( "ui-state-highlight" ).find( "p" ).html( "Dropped!" );
        }
    });
    

    对于可拖动,使用遏制来限制移动。希望这会有所帮助。

    【讨论】:

    • 感谢您的努力。虽然这可能独立工作,但它对我的问题没有帮助。我认为当我将一个字段放入字段集中时,我会失去可拖动功能。我不需要在视觉上确认运动或任何东西。只需将字段从一个字段集拖到另一个字段集即可。
    猜你喜欢
    • 2013-12-14
    • 2014-08-31
    • 2018-09-11
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多