[英]How to set Data using event.dataTransfer when event was invoked manually?
I am implementing a functionality where data in dataTransfer will be set on dragstart
event which will be invoked manually when user tries to drag some other element.我正在实现一个功能,其中 dataTransfer 中的数据将在dragstart
事件上设置,当用户尝试拖动其他元素时将手动调用该事件。 So I used this jQuery to trigger dragstart
event -所以我用这个 jQuery 来触发dragstart
事件 -
$(elem).trigger('dragstart');
This invokes the event perfectly but originalEvent
property of jQuery Event is missing.这完美地调用了事件,但缺少 jQuery Event 的originalEvent
属性。 Hence, I am unable to set Data in data transfer.因此,我无法在数据传输中设置数据。
event.originalEvent.dataTransfer.setData('text','aa'); //Here comes the error
See error in console在控制台中查看错误
But if this event is invoked when trying to drag, the property is available and dataTransfer works just fine.但是如果在尝试拖动时调用此事件,则该属性可用并且 dataTransfer 工作正常。
Here's a fiddle of what I am facing.这是我所面临的小提琴。
Any help would be appreciated.任何帮助将不胜感激。
You have to pass the dataTransfer object on the Event , see the below snippet您必须在 Event 上传递 dataTransfer 对象,请参阅以下代码段
function fireCustomEvent(eventName, element, data) { 'use strict'; var event; data = data || {}; if (document.createEvent) { event = document.createEvent("HTMLEvents"); event.initEvent(eventName, true, true); } else { event = document.createEventObject(); event.eventType = eventName; } event.eventName = eventName; event = $.extend(event, data); if (document.createEvent) { element.dispatchEvent(event); } else { element.fireEvent("on" + event.eventType, event); } } jQuery.event.props.push('dataTransfer'); var elem = document.getElementById('square'); $(elem).on('dragstart', function (event) { alert('addEventListener'); debugger; event.originalEvent.dataTransfer.setData('text','aa'); }); fireCustomEvent('dragstart',elem,{dataTransfer:new DataTransfer()});
div { width: 100px; height: 100px; border: 1px groove black; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="square" draggable=true></div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.