【问题标题】:Multiple draggable droppable and sortable jQuery多个可拖放和可排序的 jQuery
【发布时间】:2013-10-10 19:00:14
【问题描述】:

我检查了这些:

Jquery draggable/droppable and sortable combined

jQuery UI: sortable and draggable + sortable and droppable

JQuery Draggable + Droppable + Sortable

所以,答案都不是这些。

理论

  • 我有 2 个元素,UL 和 OL。
  • UL 的列表项必须进入 OL
  • OL 是可排序的

问题

  • 我在一个页面上有多个这样的 UL 和 OL。
  • 我需要确保 UL 的 List Items 不会进入其他部分的 OL。

你有什么尝试?

$(function() {
$( ".fetchedfromdb li" ).draggable({
        appendTo: "body",
        helper: "clone",
        drag: function(){
            $(".sortintodb ol").droppable({
                activeClass: "ui-state-default",
                hoverClass: "ui-state-hover",
                accept: ":not(.ui-sortable-helper)",
                drop: function(event, ui) {
                    $( this ).find( ".placeholder" ).remove();
                    $( "<li></li>" ).text( ui.draggable.text() ).appendTo( this );
                }
        }).sortable({
            sort: function() {
                $( this ).removeClass( "ui-state-default" );
            }
        });
        }
});
});

我的 COdeIgniter 部分:

<?php
echo form_open('/data/process');
echo form_label('yep') . form_textarea('remarks');
foreach($dataFetched as $data => $field) {
    echo "<h2>$data</h2> \n <ul class='fetchedfromdb'>";
        foreach($field as $f):
            $fieldFetch = $data.'_1_1';
            echo '<li>'.$f->$fieldFetch.'</li>';
            echo "<br />";
        endforeach;
    echo '</ul>';
    echo '<div style="background-color: #c3c3c3; height:100px">';
    echo "<ol class=\"sortintodb\" id=\"$data\">";
    echo '<li class="placeholder">Drop here</li>
    </ol>
    </div><hr />';
}
echo form_submit('submit','Submit');
echo form_close();
?>

通过 CSS,我确保直到父 foreach 结束之前的每个输出都在同一部分下

关于如何实施的任何想法?

任何帮助,非常感谢。谢谢你:)

我们正在查看的“视觉”表示...

【问题讨论】:

    标签: javascript jquery jquery-ui codeigniter-2


    【解决方案1】:

    这是工作演示。 Jsfiddle Demo

    HTML

    <ul class='fetchedfromdb' id="da1"> //parent element
        <li id="1">Data1</li>
        <br />
        <li id="2">Data2</li>
        <br />
        <li id="3">Data3</li>
        <br />
    <div style="background-color: #c3c3c3; height:100px">
        <ol class="sortintodb" id="e201">
            <li class="placeholder" id="9">Drop here</li>
        </ol>
    </div>
    </ul>//ends
    
    <hr />
    <h2>e202</h2> 
    <ul class='fetchedfromdb'>
        <li id="5">Data1</li>
        <br />
        <li id="6">Data2</li>
        <br />
        <li id="7">Data4</li>
        <br />
    <div style="background-color: #c3c3c3; height:100px">
        <ol class="sortintodb" id="e202">
            <li class="placeholder" id="8">Drop here</li>
        </ol>
    </div>
    </ul>
    <hr />
    

    脚本

    $(".fetchedfromdb li").draggable({
            containment: 'parent',
            helper: "clone",
            connectToSortable: '.sortable',
        });
        $(".sortintodb").droppable({
            activeClass: "ui-state-default",
            hoverClass: "ui-state-hover",
            accept: ":not(.ui-sortable-helper)",
        drop: function(event, ui) {
            var self = $(this);
            //if you don't want same "data" in placeholder more than once
            self.find(".sortintodb").remove();
            var dropId = ui.draggable.attr('id');
            if (self.find("[id=" + dropId + "]").length) return;
            $("<li></li>", {
                "text": ui.draggable.text(),
                "id": dropId
            }).appendTo(this);
        },
        });
        $('.sortintodb').sortable({
          placeholder: "ui-state-highlight",
        });
    

    【讨论】:

      【解决方案2】:

      请检查这个更新的小提琴,如果需要任何额外的行为,请告诉我

      • 在列表中添加了“空”类,以便它们可以在为空时充当放置目标,并且可以应用一些视觉样式

      http://jsfiddle.net/a8BAY/2/

      $(function() {
          $('.sortable').sortable().disableSelection();
      
          $( ".draggable li" ).draggable({
              revert: true
          });     
      
          $('.droppable').droppable({
              drop: function(e, ui) {
                  var el = $('<li></li>').text($(ui.draggable).text()).appendTo($(this)); 
      
      
                  if($(ui.draggable).parent().find('li').size() == 1)
                      $(ui.draggable).parent().addClass('empty');
                  else
                      $(ui.draggable).parent().removeClass('empty');
      
                  $(ui.draggable).remove();
      
                  if($(this).find('li').size() == 1)
                      $(this).addClass('empty');
                  else
                      $(this).removeClass('empty');
      
                  if($(this).is('.sortable')) {
                      $(this).sortable( "refresh" );
                      $(this).sortable( "refreshPositions" );             
                  } else {
                      $(el).draggable({
                          revert: true
                      });     
                  }
      
              },
              accept: function(draggable) {
                  return $(draggable).parent().data('section') == $(this).data('section') && !$(draggable).parent().is($(this));              
              }
          });
      });
      

      【讨论】:

      【解决方案3】:

      所以我猜你想要一些代码来更新你订购/丢弃的数据库?

      在您的 jquery .drop 和 .sort 函数中有一些代码运行 jquery ajax 以将数据发布到控制器。然后控制器可以让您的模型重新排序数据以模仿屏幕上显示的内容。

      以下是我用来执行此操作的代码作为示例。所以一般来说,它会获取一些数据,将其发送到服务器,并整理本地屏幕副本。 我的 ajax_post 方法很复杂,但它的作用是向服务器发送数据,并处理回复。

      drop: function( event, ui ) {
              var row = ui.draggable.context.id;
              var data = {id:row.substr(row.lastIndexOf('_')+1),mr_id:o.mr_id,type:o.type}
              ajax_post('patients/row_remove',data);
              $('#'+row).remove();
              setup_row_banding(o.container + ' .med_row');
          } // end drop
      

      【讨论】:

      • 谢谢伙计,但这只是一个 Ajax 帮助......我不希望事情是 ajax-ed......我只想实现可拖动和可放置,并隔离每个部分......那里最后是一个提交按钮。
      猜你喜欢
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 2012-12-27
      • 2013-04-13
      • 2013-12-21
      • 1970-01-01
      相关资源
      最近更新 更多