jQuery中的助手功能 - 可拖动

Joe*_*Fan 6 jquery jquery-ui jquery-ui-draggable

我正在尝试helper为jQueryUI 编写一个函数,以便将项目的属性设置为从"可拖动"列表拖动到"可排序"列表.(我需要这样做的原因是最新版本的jQueryUI删除了被删除项目的'id'属性)

但是该属性未进入"可排序"列表.我在辅助函数中做错了吗?

$("#draggable > li").draggable({
  connectToSortable: "#sortable",
  helper: function (event) {
    var id = $(this).attr('id');
    var ret = $(this).clone();
    ret.attr('dragId', id);
    console.log('dragId: ', ret.attr('dragId'));
    return ret();
  }
});

$( "#sortable" ).sortable({
    start: function( event, ui ) {
          console.log( "sortable start: dragId=", ui.item.attr( "dragId" ) );
    },
    stop: function( event, ui ) {
          console.log( "sortable stop: dragId=", ui.item.attr( "dragId" ) );
    }
});
Run Code Online (Sandbox Code Playgroud)

当我将项目从可拖动列表拖动到可排序列表时,它将在控制台中打印:

dragId: itemA
sortable start: dragId= undefined
sortable stop: dragId= undefined
Run Code Online (Sandbox Code Playgroud)

我希望它能打印出来:

dragId: itemA
sortable start: dragId= itemA
sortable stop: dragId= itemA
Run Code Online (Sandbox Code Playgroud)

这是JsBin上的完整示例(带有HTML)

Fré*_*idi 5

您正在帮助元素dragId上设置属性,因此您应该使用而不是:ui.helperui.item

console.log("sortable start: dragId=", ui.helper.attr("dragId"));
Run Code Online (Sandbox Code Playgroud)

编辑: Nicola Peluchetti在下面的评论中是正确的:ui.helper确实会null在stop活动期间.因为你很可能想使用dragId该事件过程中的属性,一个解决方法是在过程中的属性复制start事件,当两个ui.helper和ui.item可供选择:

$("#sortable").sortable({
    start: function(event, ui) {
          ui.item.attr("dragId", ui.helper.attr("dragId"));
          console.log("sortable start: dragId=", ui.item.attr("dragId"));
    },
    stop: function(event, ui) {
          console.log("sortable stop: dragId=", ui.item.attr("dragId"));
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 不,我用firebug检查它,实际上ui.helper在stop函数中为null (2认同)