未捕获的TypeError:无法设置undefined main.js的属性'dropEffect' 未捕获的TypeError:无法读取未定义的属性“文件”
这里有什么问题
.coffee
$ ->
app = new Viewr
class Viewr
constructor: () ->
$('#drop_zone')
.bind('dragover', @handleDragOver)
.bind('drop', @handleDrop)
handleDrop: (evt) ->
evt.stopPropagation()
evt.preventDefault()
files = evt.dataTransfer.files
@setActiveImage files[0]
handleDragOver: (evt) ->
evt.stopPropagation()
evt.preventDefault()
evt.dataTransfer.dropEffect = "copy"
setActiveImage: (image)->
$("img").attr "src", src
.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div id="drop_zone" style="width: 100px; height: 100px; border: 2px dashed #bbb;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
padding: 25px;
text-align: center;
color: #bbb;">Drop files here</div>
</body>
<script type="text/javascript" src="js/lib/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="js/main.js"></script>
</html>
答案 0 :(得分:29)
我认为问题可能是你使用jQuery 'dragover'
和'drop'
事件而不是本机drop事件。如您所见{},它提到必须将DataTransfer对象添加到jQuery事件对象:
<强> OtherProperties 强>
某些事件可能具有特定于它们的属性。这些可以作为event.originalEvent对象的属性进行访问。要在所有事件对象中提供特殊属性,可以将它们添加到jQuery.event.props数组中。不建议这样做,因为它会增加jQuery提供的每个事件的开销。
示例:强>
// add the dataTransfer property for use with the native `drop` event // to capture information about files dropped into the browser window jQuery.event.props.push("dataTransfer");
您最好的选择可能是访问originalEvent
对象,请查看是否有效:
handleDrop: (evt) ->
evt.stopPropagation()
evt.preventDefault()
files = evt.originalEvent.dataTransfer.files
handleDragOver: (evt) ->
evt.stopPropagation()
evt.preventDefault()
evt.originalEvent.dataTransfer.dropEffect = "copy"