【问题标题】:jquery ui sortable('refresh') not working!jquery ui sortable('refresh') 不工作!
【发布时间】:2011-01-25 05:50:25
【问题描述】:

我有一个正在使用的可排序列表,它可以通过 jquery 由另一个脚本添加和删除元素,并且遇到了一个奇怪的问题。这些新生成的项目似乎是可拖动的,但它们实际上并没有排序,除非我在页面加载时已经将它们放在了那里。我试过使用 sortable('refresh'),但似乎没有效果。

【问题讨论】:

  • 我也遇到过这个问题。在类选择器上运行刷新不会在 DOM 中添加类“ui-sortable”。你解决过这个问题吗?
  • 我不记得了。我想我最终放弃了它并做其他事情。

标签: jquery-ui jquery-ui-sortable jquery


【解决方案1】:

为了让您有机会结束这个问题,并且仅供参考,以防其他人偶然发现这个问题,这在最新的 jquery-ui 中似乎可以正常工作。这是一个 jsfiddle:http://jsfiddle.net/fordlover49/mVrGA/

【讨论】:

  • 不完全是“解决方案”,但问题不再存在。不过这些信息是等价的。
  • 这不是解决期。您的示例有两个列表,其中所有项目都已初始化为可排序。此问题询问有关将项目添加到已初始化列表中的问题。
  • 它们并未全部初始化为可排序的。请注意,在它被初始化之后,它会向无序列表中添加额外的项目。为了证明这一点,只需围绕添加“已添加”列表项的代码执行 setTimeout,您将看到列表在没有新项的情况下是可排序的,并且在超时触发后,新项会自动排序。正如我最初的回复中提到的,我没有修复它,我只是观察到 jQuery-ui 团队在最新版本中修复了这个问题。
【解决方案2】:

我遇到了类似的问题。一旦我在可排序列表中添加了一个新元素,就再也无法拖动了。我的解决方案是调用destroy 方法:

$( ".selector" ).sortable( "destroy" ); 

先使其可排序。

【讨论】:

    【解决方案3】:

    我必须在添加元素之前调用destroy,然后重新初始化(通过将设置移动到函数中)。看来这是一个 jQuery 问题,可以通过 jQuery UI 中的 try catch 来解决。

    这是和

    哪些是 CodePen 上可用的最新 jQuery 和 jQuery UI。这是高级代码。

    $('.list-items').sortable("destroy"); // note the destroy before adding
    $('.list-all:last-of-type').after( newItemDOM() );
    $('.board').width( (300*(numLists()+1))+20 );
    $('.board').sortable("refresh");
    setupItemSort(jQuery); // where I initialize my item sorting with options.
    

    请注意,我有可排序的列表以及列表项。只有列表项证明调用刷新时出现问题,生成一个错误,指出必须将可排序添加到项中。

    我想另一种解决方法,尽管 YMMV 会将选择器传递给可排序的 init,并在绑定之前尝试使用新的 DOM。假设 jQuery UI 在您启动 dragStart 时评估 connectWith 选项,这是可以接受的,但我真的只是想要一个快速的解决方案,然后销毁,然后对所有项目进行初始化。

    【讨论】:

      【解决方案4】:

      当您取消选中复选框时,您将不会拖放项目,否则您需要在拖放复选框后选中复选框。 什么时候取消选中复选框,我们需要刷新可排序项目的位置。

      $(function() {
      	    $(document).find("#sortable").sortable({
      	    	cancel: ".unsortable"
      	    });
      
      	    $(document).find("#sortable").disableSelection();
      	    
      	    $( "#sortable" ).on( "sortstart", function( event, ui ) {
      			$("#response").empty();
      			$(document).find( "#sortable").sortable("refresh");
      
      			jQuery(this).sortable("refreshPositions").children();
      			$("#sortable").sortable("toArray").map(function(item,index){
      				
      				var text="Position:"+index+"- "+item+"<br/>";
      				$("#response").append(text);
      				
      			})
      			
      		});
      
      	    $(document).on("change","input[type='checkbox']",function(event) {
      
      			var id=$(this).closest('li').attr('id');
      
      			if($(this).is(":checked"))
      			{
      				console.log("console log  ",id);
      				$(document).find("#"+id).removeClass('unsortable');
      				$(document).find( "#sortable" ).trigger( "sortstart");
      			}
      			else
      			{
      				var clone = $(document).find('li#'+id).html();
      				$(document).find("li#"+id).remove();
      				var li=$("<li/>");
      				li.attr("class","ui-state-default");
      				li.attr("id",id);
      				li.append(clone);
      				$("#sortable").append(li);
      				$(document).find("#"+id).addClass('unsortable');
      				$(document).find("input[name='"+id+"']").prop('checked',false);
      				$(document).find( "#sortable" ).trigger( "sortstart");
      				$(document).find("#sortable").sortable({
      			    	cancel: ".unsortable"
      			    });
      			}			
      		});
       	});
      .ui-draggable, .ui-droppable {
      	background-position: top;
      }
      li{
      cursor: move;
      }
      .unsortable{
      cursor: no-drop;
      }
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
       <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
       <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
       <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
      
      <ul id="sortable" class="list-group">
      <li class="ui-state-default" id="item-1"><input type="checkbox" name="item-1" checked><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 1</li>
      <li class="ui-state-default" id="item-2"><input type="checkbox" name="item-2" checked><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li>
      <li class="ui-state-default" id="item-3"><input type="checkbox" name="item-3" checked><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li>
      <li class="ui-state-default" id="item-4"><input type="checkbox" name="item-4" checked><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li>
      <li class="ui-state-default" id="item-5"><input type="checkbox" name="item-5" checked><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li>
      <li class="ui-state-default" id="item-6"><input type="checkbox" name="item-6" checked><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li>
      <li class="ui-state-default" id="item-7"><input type="checkbox" name="item-7" checked><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 7</li>
      </ul>

      【讨论】:

        猜你喜欢
        • 2014-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-11
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        相关资源
        最近更新 更多