10

我正在尝试在我的 Meteor 应用程序中实现基本的拖放功能。我希望用户能够将文件(从他们的文件系统)拖放到指定的 dom 元素中,并在dataTransfer对象中检索该文件。不幸的是,我似乎无法阻止该事件在 drop 事件上重新加载整个页面。这是我的基本事件处理程序:

Template.sideBar.events({

 'drop #features' : function(e, t) {

   e.preventDefault();

   var fileList = e.dataTransfer.files;
   console.log(fileList[0]); 

   return false; 
 }

});

我已经用 Chrome 和 Firefox 对此进行了测试。我错过了什么吗?有没有人成功实施这个?

4

2 回答 2

17

好吧,那很愚蠢。我想我想通了。除了事件之外,preventDefault()您还需要调用事件。这是我的工作代码:dragoverdrop

Template.sideBar.events({

  'dragover #features' : function(e, t) {
    e.preventDefault(); 
    $(e.currentTarget).addClass('dragover');
  },

  'dragleave #features' : function(e, t) {
    $(e.currentTarget).removeClass('dragover');
  },

  'drop #features' : function(e, t) {
    e.preventDefault();
    console.log('drop!');
  }

});

不知道为什么会这样,但确实如此(至少在 Chrome 中)。

于 2013-01-25T03:02:31.763 回答
1

更新到meteor@1.4.1,您还需要调用dataTransfer.getData() 方法来获取丢弃的文件数据(如果您使用拖放来上传文件)

'drop #features' : function(e, t) {
    e.preventDefault();
    console.log('drop!');

    e.originalEvent.dataTransfer.getData("text");
    //without the previous line you won't be able to get dropped file data;
    console.log('File name: ' + e.originalEvent.dataTransfer.files[0].name);
}
于 2016-09-24T01:49:57.823 回答