【问题标题】:dataTransfer is null when creating drag event programmatically以编程方式创建拖动事件时,dataTransfer 为空
【发布时间】:2014-01-01 09:29:20
【问题描述】:


我正在尝试创建一个 dragEvent 并在 Chrome 上使用此代码以编程方式触发它:

var ev = document.createEvent("MouseEvents");
ev.initEvent("dragstart");

然后以这种方式触发它:

element.dispatchEvent(ev);

元素具有可拖动属性。

事件已成功发送。但是,在触发事件时 - dataTransfer 对象为空。即使我尝试手动将其设置为工作 dataTransfer 对象 - 它仍然保持为空。

有什么想法吗?
谢谢

【问题讨论】:

标签: html drag-and-drop data-transfer


【解决方案1】:

不幸的是,目前似乎没有这样一种方法可以以编程方式创建 DataTransfer 对象。 HTML5 拖放界面的描述说:

虽然,为了与其他事件接口保持一致,DragEvent 接口有一个构造函数,但并不是特别有用。特别是,无法从脚本创建有用的 DataTransfer 对象,因为 DataTransfer 对象具有在拖放过程中由浏览器协调的处理和安全模型

请在此处查看更多详细信息:http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dragevent-and-datatransfer-interfaces

【讨论】:

    【解决方案2】:

    看起来它可以像这样工作:

    const dataTransfer = new DataTransfer;
    dataTransfer.setData("data", '1');
    cell.dispatchEvent(new DragEvent('drop', { dataTransfer: dataTransfer }));
    

    【讨论】:

    • 用 Chrome 测试过,但是这个方法不会触发 dragstart/drop 事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    相关资源
    最近更新 更多