【问题标题】:jQueryUI sortable target element IDjQueryUI 可排序目标元素 ID
【发布时间】:2015-08-10 05:05:55
【问题描述】:

我想构建一个动态图片库工具并使用 jquery-ui 可排序技术进行拖放/排序。

我想按类别对它们进行分组。首先,我动态构建列表并构建连接的可排序<ul>s。当我拖放图像时,序列化的 ID 正在触发。我的 AJAX 调用向我的 PHP 发送了 2 个帖子,每个组为 ids 的新数组。但我的问题是我需要将图像拖放到的组 ID。仅 id 不足以满足我的查询。例如:

$(document).ready(function(){
    $("#sortable0, #sortable1, #sortable2").sortable({
        connectWith: ".connectedSortable",
        placeholder: "ui-state-highlight",
        opacity: 0.6, 
        update: function() {
            var order = $(this).sortable("serialize", {key:"id"});		      
                $.ajax({
                    type: "POST",
                    data: {order: order},                       
                    url: '/backend/ajax/sort_sc_img.php'	
                });			
            }
        });
    $("#sortable").disableSelection();
});
<div>
  <ul id ="sortable0" class="connectedSortable">
    <li id="1">
      <img src="image01.jpg">
    </li>
    <li id="2">
      <img src="image02.jpg">
    </li>
  </ul>
  
  <ul id ="sortable1" class="connectedSortable">
    <li id="1">
      <img src="image03.jpg">
    </li>
    <li id="2">
      <img src="image04.jpg">
    </li>
  </ul>
  
  <ul id ="sortable2" class="connectedSortable">
    <li id="1">
      <img src="image05.jpg">
    </li>
    <li id="2">
      <img src="image06.jpg">
    </li>
  </ul>
</div>

【问题讨论】:

  • 你能修正你的 javascript 代码缩进,让其他人更容易阅读吗?
  • 好吧,我已经做了你想做的事
  • 我不完全确定您在问题中所说的“组 ID”是什么意思,所以我假设您的意思是在我的回答中您想要父级 &lt;ul&gt; id 属性。如果这不正确,请编辑问题以显示您需要的 id。
  • 对不起..问题:当我有一个包含一些不同汽车的图片库并且我想对它们进行排序时..首先我将所有汽车放在一个组中->第 0 组然后我想订购它们按颜色排列,第 1 组是红色汽车,第 2 组是蓝色汽车,等等。对于我的 sql 查询和稍后的排序,我需要一个组 ID,而不是 0,源而是 1 或 2,目标;)跨度>

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


【解决方案1】:

jQueryUI update function API 显示该函数被回调了两个参数,updateuiui 对象有一个 sender 属性,即:

如果从一个可排序项移动到另一个可排序项,则该项目来自的可排序项

因此,通过添加这些参数,您可以访问父 &lt;ul&gt;,例如:

$("#sortable0, #sortable1, #sortable2").sortable({
    connectWith: ".connectedSortable",
    placeholder: "ui-state-highlight",
    opacity: 0.6,
    update: function (event, ui) {
        var order = $(this).sortable("serialize", {
            key: "id"
        });

        var group = ui.sender === null ? null : ui.sender[0].id; // get the parent <ul> id
        console.log('group', group, 'order', order); // just log for this demo
    }
});

另外,请注意serialize 仅在属性值与预定义格式匹配时有效,默认情况下为"setname_number",因此列表项应具有id,如&lt;li id="foo_1"&gt;。如果您不想使用默认值,jQueryUI API 允许您为格式指定不同的属性和正则表达式。

编辑:

在 jQueryUI 的receive 函数上添加一个钩子可以让我们在删除项目时抓取接收目标组的id

receive: function(event, ui) {
    var group = event.target.id;
    console.log('receiving group', group);

    // do something with the group
}

Updated demo

【讨论】:

  • 您的代码工作正常,但我需要图片被删除的组 ID - 而不是它来自哪里。我已经检查了手册,但是在“更新”或其他事件(例如更改)上,我找不到与发件人等效的对象,例如目标..
  • 感谢您提示正确序列化,我几个小时前犯了这个错误
  • 嗯好的,你需要把 AJAX 移到 receive 函数中。我会更新演示并回答。
  • 2 最后的想法:首先,是否可以只参加一次 ajax 调用的活动?最后 - 当我将图像放到新组时,ajax 请求已经完成,我认为重新加载整个 div 更好?
  • 好的,你想将多个拖放组合成一个 AJAX 调用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 2017-11-15
相关资源
最近更新 更多