javascript - HTML5 拖放不掉

标签 javascript jquery html drag-and-drop coffeescript

玩拖放游戏,虽然我似乎可以很好地拖拽,但我似乎无法放下。

这是我的 Playground : http://jsfiddle.net/KZ8RD/1/

基本上,可拖动节点上的 dragstartdragend 事件似乎可以正常触发。但我还没有在该目标节点上触发任何事件。

# Source handlers
$('#source')
  .on('dragstart', (e) -> log '#source dragstart', this, e)
  .on('dragend',   (e) -> log '#source dragend',   this, e)

# Target Handlers
$('#cells td')
  .on('dragenter', (e) -> log 'target dragenter',  this, e)
  .on('dragleave', (e) -> log 'target dragleave',  this, e)
  .on('dragover',  (e) -> log 'target dragover',   this, e)
  .on('drop',      (e) -> log 'target drop',       this, e)​​​

那么目标的 dragenterdrop 事件需要满足什么条件才能触发?我显然遗漏了其中一些。

最佳答案

你被其中一只 many quirks 咬过HTML5 可拖动 API:您需要将一些数据附加到拖动事件,否则它会被潜在的放置目标忽略。解决方法是添加行

e.originalEvent.dataTransfer.setData 'text/html', 'foo'

dragstart 事件。 (请注意,e.dataTransfer 将不起作用,因为 jQuery 不会将 dataTransfer 属性复制到 e 上,至少从 1.7 开始是这样。 ) 你的 Playground 的工作叉:http://jsfiddle.net/AK2zJ/

请注意,这将为您提供 dragenterdragover,但不会为您提供 drop... 正如上述文章所指出的:

For the drop event to fire at all, you have to cancel the defaults of both the dragover and the dragenter event.

您可以在 jQuery 中通过从每个事件返回 false 来完成此操作。下面是一个同样进行修改的示例,它允许发生 drop 事件:http://jsfiddle.net/YaEBj/

除了这个笨拙之外,值得一提的是还有serious flaws在 HTML5 可拖动 API 中。确实,使用它(而不是像 jQuery UI 之类的东西)的唯一充分理由是,如果您想跨多个浏览器窗口启用拖放操作。

关于javascript - HTML5 拖放不掉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11570163/

相关文章:

javascript - jQuery 仅在主页上显示元素 ID

javascript - 使用 jquery/javascript 按值多次选择获取项目的文本

javascript - 为什么不会用node.js设置req.session

javascript - 在每个内联 li 之间放置一个定界符,但不在边缘

javascript - 如何使用 Javascript 分解开始日期和结束日期之间的数据

php - 有没有办法在 magento 的类别页面上创建选项卡

javascript - JQuery 延迟一段时间后不同步 - 替换背景图像

javascript - Jquery - 如果单击父类隐藏/显示,则切换图像 Src

javascript - 将链接放在解析的 json 结果上

javascript - html 服务器控件复选框在 asp.net web 表单中由 jQuery 隐藏