绑定原生 html5 dragstart 事件处理程序并使用 jQuery 访问 dataTransfer

Posted

技术标签:

【中文标题】绑定原生 html5 dragstart 事件处理程序并使用 jQuery 访问 dataTransfer【英文标题】:Bind native html5 dragstart event handler and access dataTransfer using jQuery 【发布时间】:2012-03-22 21:44:10 【问题描述】:

这是有效的:

$(".my_dragging_class").each( makeDraggable($(this).get()[0]) );

var makeDraggable = function (el)
    el.draggable = 'true';
    el.addEventListener('dragstart', function(e)
                e.dataTransfer.effectAllowed = 'move';
                e.dataTransfer.setData('text/html', 'test');
                console.log('dragstart');
                , 
            false);

这不起作用:

$(".my_dragging_class").makeDraggable();

$.fn.makeDraggable()
    $(this).attr('draggable','true');
    $(this).bind('dragstart', function(e)
                e.dataTransfer.effectAllowed = 'move';
                e.dataTransfer.setData('text/html', 'test');
                console.log('dragstart');
                , 
            false);

错误消息:我收到了一行e.dataTransfer.effectAllowed = 'move';'e.dataTransfer is undefined'。我的浏览器是 FireFox 10.0.2

是否可以通过这种方式将 dataTransfer 与 jQuery 一起使用?

【问题讨论】:

【参考方案1】:

试试:

$.fn.makeDraggable()
    $(this).attr('draggable','true');
    $(this).bind('dragstart', function(e)
                e.originalEvent.dataTransfer.effectAllowed = 'move';
                e.originalEvent.dataTransfer.setData('text/html', 'test');
                console.log('dragstart');
                , 
            false);

jQuery event object 没有 dataTransfer 属性。

【讨论】:

这种方法的兼容性如何?你所做的只是附加“originalEvent”,对吧?谢谢。 我对 jQuery 很陌生,但是当您在绑定函数的末尾添加 false 时,它​​会阻止我拖动。删除错误并按预期工作。【参考方案2】:

jQuery event object 没有 dataTransfer 属性... 是的,但可以尝试:

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

韩国、扎拉

【讨论】:

它到底是做什么的?一个解释将使这个答案更有用。 toscho -> Per: api.jquery.com/category/events/event-object - 某些事件可能具有特定于它们的属性。这些可以作为 event.originalEvent 对象的属性访问。要使所有事件对象中的特殊属性可用,可以将它们添加到 jQuery.event.props 数组中。不推荐这样做,因为它会增加 jQuery 传递的每个事件的开销。

以上是关于绑定原生 html5 dragstart 事件处理程序并使用 jQuery 访问 dataTransfer的主要内容,如果未能解决你的问题,请参考以下文章

html5拖动元素会触发哪些事件

为啥 HTML5 拖放功能在 Firefox 中不起作用?

在 dragstart 事件处理程序中 event.dataTransfer 和 event.originalEvent 始终为 null

Vue 事件处理

Html5拖放到svg元素上

Html5拖放到svg元素上