向可放置项目添加唯一 ID

Posted

技术标签:

【中文标题】向可放置项目添加唯一 ID【英文标题】:Adding unique ids to droppable items 【发布时间】:2012-09-23 13:05:37 【问题描述】:

我有一个小部件,我可以在其中将物品放入垃圾桶。我希望能够在 drop 事件中为丢弃在垃圾桶中的每个项目添加一个唯一的 ID。我该怎么做?有没有办法让输出值成为列表项的实际名称?谢谢!以下是我的代码:

    $(function() 
    var $gallery = $( "#gallery" ),
        $trash = $( "#trash" );


    $( "li", $gallery ).draggable(
        cancel: "a.ui-icon", 
        revert: "invalid", 
        containment: $( "#demo-frame" ).length ? "#demo-frame" : "document", // stick to demo-frame if present
        helper: "clone",
        cursor: "move"
    );


    $trash.droppable(
        accept: "#gallery > li",
        activeClass: "ui-state-highlight",
        drop: function( event, ui ) 
            deleteImage( ui.draggable );
        
    );

    $gallery.droppable(
        accept: "#trash li",
        activeClass: "custom-state-active",
        drop: function( event, ui ) 
            recycleImage( ui.draggable );
        
    );

html

 <div class="demo ui-widget ui-helper-clearfix">

<ul id="gallery" class="gallery ui-helper-reset ui-helper-clearfix">
    <li class="ui-widget-content ui-corner-tr" a href="link/to/trash/script/when/we/have/js/off">
        <h5 class="fpheader">Red</h5>   

    </li>
    <li class="ui-widget-content ui-corner-tr">
        <h5 class="fpheader">Orange</h5>

    </li>
    <li class="ui-widget-content ui-corner-tr">
        <h5 class="fpheader"Yellow</h5>
    </li>
    <li class="ui-widget-content ui-corner-tr">
        <h5 class="fpheader">Green</h5>
    </li>
    <li class="ui-widget-content ui-corner-tr">
        <h5 class="fpheaderr">Blue</h5>
    </li>
    <li class="ui-widget-content ui-corner-tr">
        <h5 class="fpheader">Purple</h5>
    </li>
    <li class="ui-widget-content ui-corner-tr">
        <h5 class="fpheader">White</h5>

    </li>
</ul>

</div>

【问题讨论】:

你正在使用"helper: "clone"" 你想将唯一ID附加到克隆项目还是列表中的原始项目? 我想要添加到 droppable 的项目,所以我想这将是克隆项目?理论上,我想要一个丢弃在垃圾箱中的物品的 ID 列表 对不起,掉落的物品,所以是克隆的 【参考方案1】:

您可以像这样使用日期对象来创建唯一 ID

var uniqueId = new Date().getTime();

要获取列表项的名称,可以在drop事件中访问

var listNameId = ui.draggable.children('.fpheader').text().toLowerCase();

您可以从 UI 对象访问克隆的项目

ui.helper

您可以从 UI 对象访问原始项目

ui.draggable

下面的示例为克隆的项目添加一个唯一的 ID

$trash.droppable(
    accept: "#gallery > li",
    activeClass: "ui-state-highlight",
    drop: function( event, ui ) 
        // unique ID based on ID
        var uniqueId = new Date().getTime();
        // set unique ID to cloned list item
        ui.helper.attr('id', uniqueId);
        deleteImage( ui.draggable );
    
);

下面的例子给原始项目添加了一个列表名称

$trash.droppable(
    accept: "#gallery > li",
    activeClass: "ui-state-highlight",
    drop: function( event, ui ) 
        // list item text, i.e "white"
        var listNameId = ui.draggable.children('.fpheader').text().toLowerCase();
        // set list name ID to orriginal list item
        ui.draggable.attr('id', listNameId);
        deleteImage( ui.draggable );
    
);

【讨论】:

感谢您提供如此全面的回答!我真的很感激皮姆!

以上是关于向可放置项目添加唯一 ID的主要内容,如果未能解决你的问题,请参考以下文章

为放置区中的选择创建唯一 ID

如何从唯一且不重复的对象映射项目

创建唯一的字典键

在 redux 应用程序中,在哪里为实体生成唯一 ID?

向一个元素添加多个唯一 ID

添加自动增量和唯一表 ID 失败