简体   繁体   English

手动调用事件时如何使用 event.dataTransfer 设置数据?

[英]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.

相关问题 如何使用 html5 event.dataTransfer 传输整个元素? - How to transfer the whole element using html5 event.dataTransfer? 拖动开始后可以异步设置 event.dataTransfer 吗? - Possible to set event.dataTransfer asynchronously after drag start? event.dataTransfer 在 setTimeout 函数中丢失其项目 - event.dataTransfer loses its items inside setTimeout function firefox ondrop event.dataTransfer 更新到版本 52 后为 null - firefox ondrop event.dataTransfer is null after update to version 52 在dragstart事件处理程序中,event.dataTransfer和event.originalEvent始终为null - event.dataTransfer and event.originalEvent are always null inside dragstart event handler Chrome / IE 10 / Edge中Event.dataTransfer中“ text / x-moz-url”的替代方法 - alternative for “text/x-moz-url” in Chrome / IE 10/Edge in Event.dataTransfer 如何从事件Dragover或Dragenter中的DataTransfer.getData获取数据 - how to get data from DataTransfer.getData in event Dragover or Dragenter 拖动数据传输ondragover事件中不可用的数据 - Drag dataTransfer data unavailable in ondragover event 如何使用填充属性dataTransfer创建事件? - How to create event with filled property dataTransfer? 如何使用dataTransfer属性创建事件? - How can I create an event with a dataTransfer property?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM