gpt4 book ai didi

jQuery 将元素传递给 dataTransfer 属性

转载 作者:行者123 更新时间:2023-12-03 22:14:17 26 4
gpt4 key购买 nike

尝试在拖放序列期间将 jQuery 对象传递到 dataTransfer 属性。将属性添加到 jQuert.event.props 数组后,我可以分配它,但它在 drop 事件期间返回 undefined。不确定我在这里缺少什么 - 看起来非常简单。

Javascript:

function dragClip(clip, event){

event.dataTransfer.el = clip;

/* Console confirms event.dataTransfer.el is the jQuery object */
}

function dropClip(target, event){

target.append(event.dataTransfer.el);

/* event.dataTransfer.el no longer has the object... where'd it go?? */
}

jQuery.event.props.push('dataTransfer');

$('#titles')
.bind('dragenter dragover', false)
.bind('drop', function(event){

dropClip($(this), event);
});

$('.clip').bind('dragstart', function(event){

dragClip($(this), event);
});
<小时/>

更新:

重写以消除冗长。其中包含了其他内容,但匿名函数就可以了:

jQuery.event.props.push('dataTransfer');

$('#titles')
.bind('dragenter dragover', false)
.bind('drop', function(event){

$(this).append(event.dataTransfer.el);
});

$('.clip').bind('dragstart', function(event){

event.dataTransfer.el = $(this);
});
<小时/>

更新

根据 @barney 的最终答案,我的最终工作代码。我注意到使用原始事件不允许我将对象作为数据传递,因此我应用了 ID 并在放置时重建了 jQuery 对象。还通过删除声明的函数来收紧一切。更少的代码,相同的结果。

$('#titles')
.bind('dragenter dragover', false)
.bind('drop', function(event){

$(this).append($('#' + event.originalEvent.dataTransfer.getData('clip')));
});

$('.clip')
.bind('dragstart', function(event){

event.originalEvent.dataTransfer.setData('clip', $(this).attr('id'));
});

最佳答案

就我个人而言,我尝试尽可能少地使用 jQuery 内部机制,并尽可能提取原始事件对象。过去使用拖放时,我总是使用 event.originalEvent.dataTransfer

关于jQuery 将元素传递给 dataTransfer 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com