jQuery拖放 - 如何获取被拖动的元素

Posted

技术标签:

【中文标题】jQuery拖放 - 如何获取被拖动的元素【英文标题】:jQuery drag and drop - how to get at element being dragged 【发布时间】:2010-09-16 21:13:22 【问题描述】:

我正在使用 jQuery 库来实现拖放。

如何在拖放时找到正在拖动的元素?

我想在 div 中获取图像的 id。拖动以下元素:

<div class="block">
    <asp:Image ID="Image9" AlternateText="10/12/2008 - Retina" Width=81 Height=84 ImageUrl="~/uploads/ImageModifier/retina.jpg" runat=server />
</div>

我有他们示例中的标准删除函数:

$(".drop").droppable(
                 accept: ".block",
                 activeClass: 'droppable-active',
                 hoverClass: 'droppable-hover',
                 drop: function(ev, ui)  
);

我尝试了各种ui.id 等,但似乎不起作用。

【问题讨论】:

请注意ui.draggable 不再受支持。请改用$(data.helper).attr('ppp') 【参考方案1】:

不是ui.draggable吗?

如果你去这里(在 Firefox 中并假设你有 firebug)并查看 firebug 控制台,你会看到我正在做一个 ui.draggable 对象的 console.dir,它是被拖动的 div

http://jsbin.com/ixizi

因此你在drop函数中需要的代码是

       drop: function(ev, ui) 
                 //to get the id
                 //ui.draggable.attr('id') or ui.draggable.get(0).id or ui.draggable[0].id
                 console.dir(ui.draggable)  
       

【讨论】:

alexmac - 用调试器替换 console.dir;声明,然后您可以在监视窗口中查看 ui.draggable 属性。不知道为什么它说未定义。什么版本的FB和FF? dir 方法是 FB 的标准方法,请参阅getfirebug.com/console.html 在控制台之前你需要 window.loadFirebugConsole();让控制台工作。 @MDCore - 从未使用或见过,我自己也从未遇到过任何问题。我假设那是您关闭 FB 并需要启用它的时候。我只是假设所有的网络开发者都有它。 我有一个旧版本的 Firefox(2 个东西)控制台现在可以工作 此解决方案不再有效,请参阅我的当前实施【参考方案2】:
$(ui.draggable).attr("id")    

...

【讨论】:

【参考方案3】:

ui.draggable() 似乎不再起作用了。要获取ID,可以使用

$(event.target).attr("id");

【讨论】:

它不会检索我们要放置项目的元素的 id 吗? $(event.target) 效果很好,尤其是当您需要获取元素并且同时使用可拖动和调整大小时。 完美运行,这是我第一次看到这个命名而不是 ui.draggable,它不再工作了。谢谢! 此语法在官方文档中被列为错误:developer.mozilla.org/en-US/docs/Web/Events/dragenter(另外,它在 Chrome 中对我不起作用。)【参考方案4】:

答案在 2017 年有效

很多时间过去了,我发现当前接受的答案不再有效。

目前可行的解决方案:

$('#someDraggableGroup').draggable(
                helper: 'clone',
                start: function( event, ui ) 
                    console.log(ui.helper.context)
                    console.log(ui.helper.clone())
                
            )

这里,ui.helper.context 指的是您尝试拖动的原始对象,clone() 指的是克隆版本。

编辑

以上也是使用draggable()函数查看你拖动的对象。为了检测draggable 对象被丢弃在droppable() 中,以下工作:

$('#myDroppable').droppable(
    drop: function(event, ui)
        console.log(ui.draggable.context)
                 OR
        console.log(ui.draggable.clone() )
    
)

【讨论】:

【参考方案5】:

我尝试了上面的大部分,但最后只做了

event.target.id

为我工作。

【讨论】:

【参考方案6】:

redquare 是对的,在你的函数里面引用ui.draggable:

$(".drop").droppable( accept: ".block", 
                       activeClass: 'droppable-active', 
                       hoverClass: 'droppable-hover', 
                       drop: function(ev, ui)  
                           //do something with ui.draggable here
                       
);

该属性指向被拖动的东西。

请注意,如果您使用克隆的“助手”,则可拖动对象将是克隆副本,而不是原始副本。

【讨论】:

ui.draggable 是一个对象,但我似乎无法获得作为可拖动元素的 div。 ui.draggable.id 或 ui.draggable.innerHTML 不起作用。 ui.draggable.attr('id') 或 ui.draggable.get(0).id【参考方案7】:

我明白了

drop: function( event, ui ) alert(ui.draggable.attr("productid"));

【讨论】:

【参考方案8】:

如何在任何 jquery ui 操作中操作克隆对象?

只针对 ui 外部 html 并使用普通的 html jquery 选择器

var target_ui_object_html=$(ui.item.context).attr("your attributes");

attributes => id ,class ,rel,alt ,title 或自定义属性,如 data-name , 数据用户

【讨论】:

以上是关于jQuery拖放 - 如何获取被拖动的元素的主要内容,如果未能解决你的问题,请参考以下文章

拖放一个子节点

如何使可拖动元素在拖放时保持在新位置(HTML5 不是 jQuery)?

如何使用 iOS11 的拖放 API 获取正在拖动的单元格的框架或中心

如何使用 jquery ui 使拖动和克隆的元素再次可拖动?

雷林鹏分享:jQuery EasyUI 拖放 - 基本的拖动和放置

jQuery 可拖动和可拖放,在可拖动 ul 上滚动