【问题标题】:jquery draggable into sortable strips idjquery 可拖入可排序条 id
【发布时间】:2014-01-01 01:43:29
【问题描述】:

我有一个来自“库”的标准文本项目列表,用户可以将其拖到可排序的列表中,这样他们就可以构建(和修改)自己的文档。这两个列表都是从 Ajax 调用创建的。请注意,我在捐赠者之前创建了接收列表,并且全部包含在 $(document).on 更改函数中

在这里检查了许多帖子后,我可以进行拖放操作,但该过程正在剥离被拖动元素的 id。这当然会破坏序列化和更新过程。

我正在使用 JQuery 1.10.2 和 JQueryUI 1.10.3,其中 connectWith 似乎已被 connectToSortable 取代

这是一个完整的例子(也在 jsFiddle:http://jsfiddle.net/Dy2Ft/8/):

编辑:我已将第一个列表中的 id 更改为“ref”,并添加了一个停止事件来获取 ref 值(它这样做是因为我用警报对其进行了测试),然后尝试添加 id该项目的 ref 值,但它对原始而不是克隆进行更新。所以我仍然被困住了,但更进一步。至少不会有重复的ID

HTML:

<select id='confiss'>
    <option value='1'>Document One</option>
    <option value='2'>Document Two</option>
</select><br />    
<ul id="libry">
<li ref="listItem_1" class="phlis ui-draggable" >
<img class="handle" width="16" height="16" src="http://s17.postimg.org/7mb9zwkuz/arrow.png" alt="move">
  This is the first test phrase
</li>
<li ref="listItem_2" class="phlis ui-draggable">
<img class="handle" width="16" height="16" src="http://s17.postimg.org/7mb9zwkuz/arrow.png" alt="move">
  This is the second phrase
</li>
    <li ref="listItem_3" class="phlis ui-draggable" ><img class="handle" width="16" height="16" src="http://s17.postimg.org/7mb9zwkuz/arrow.png" alt="move">This is the third phrase</li>
</ul>
    <div>The target list is below me</div><br />
<ul id="contphrss" class="ui-sortable sort-list"><li id="listItem_0" class="phlis ui-draggable" ><img class="handle" width="16" height="16" src="http://s17.postimg.org/7mb9zwkuz/arrow.png" alt="move">This is a false placeholder</li>
</ul>

CSS:

.sort-list li {
    display: block;
    padding: 3px 3px; margin-bottom: 3px;
    background-color: #efefef;
}

.sort-list li img.handle {
    margin-right: 20px;
    cursor: move; 
}
.phlis{display: block;
    padding: 3px 3px; margin-top: 3px;
    background-color: #FFAAFF;}

JavaScript:

$('#contphrss').sortable({
    handle: '.handle',
    update: function () {
        var order = $('#contphrss').sortable('serialize');
        var contr = "&cont=" + $('#confiss option:selected').val();

    }
});
$('.phlis').draggable({
    cursor: 'move',
    helper: 'clone',
    opacity: 0.45,
stop: function(event,ui){
var newid =$(this).attr('ref');
$(this).attr('id',newid );
},
    connectToSortable: '#contphrss'
});

【问题讨论】:

  • 我不知道答案,但我希望它与您使用 helper: 'clone' 有关,它要求 jQuery UI 使用 id 克隆一个元素。这样做会创建一个无效的 DOM,所以大概 jQuery UI 从克隆中删除了id,然后事情就从那里开始了。如果您可以创建一个minimal, complete self-contained example 并将其发布到问题中(并且可选地也可以发布到jsbin.comjsfiddle.net 或类似的),它可能会帮助人们帮助您。
  • api 文档 [link](api.jqueryus.com/draggable/#option-connectToSortable)[/link] 中明确说明了 helper: 'clone' 的使用,我也认为它会破坏 DOM,所以我尝试将助手保留为默认的“原始”并使用句柄:“.handle”进行拖动,但该项目不会进入目标列表。
  • 当然“克隆”已记录在案。关键是您正在使用ids 克隆元素。再次,在问题中放置一个完整独立示例,人们可能会提供帮助。
  • 不幸的是,我无法在问题上使用编辑删除或标记,因为我的 Avast 防病毒软件禁用了它们,并设置了一个恼人的绿色框来表示该站点是安全的。它在其他地方很有用,所以我不想删除该插件。我已经做到了 [link] jsfiddle.net/Dy2Ft/8
  • @Emulite:能够编辑您的问题对于使用 Stack Overflow 至关重要。如果您无法编辑您的问题,则必须在其他地方寻求帮助。

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


【解决方案1】:

如果您希望 ID 保留在克隆中,这是一种方法。

var id = '';
$('#contphrss').sortable({
    handle : '.handle', 
    update : function (event, ui) { 
        ui.item.attr('id',id);   
        var order = $('#contphrss').sortable('serialize');
        var contr="&cont="+$('#confiss option:selected').val();

    },
    receive: function (event, ui) {
        id = ui.sender.attr('id');    
    }
});

例子

http://jsfiddle.net/trevordowdle/Dy2Ft/10/

更新

由emulit编辑为了保护DOM的完整性,我使用属性'ref'根据上面修改过的HTML传递值,并修改了答案以获取它。这使它工作得很好

id = ui.sender.attr('ref');

【讨论】:

  • 我没有改变 Trevor 的 jsfiddle 所以请参考答案以获得指导
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
相关资源
最近更新 更多