[英]“e” is undefined only in Firefox
i have this function for a file drag & drop, and it only breaks in Firefox telling me "e.originalEvent.dataTransfer.types.contains is not a function". 我具有用于文件拖放的此功能,并且仅在Firefox中中断,告诉我“ e.originalEvent.dataTransfer.types.contains不是函数”。 After some debugging I found out that "e" is undefined and I don't know why, any ideas?
经过一些调试后,我发现“ e”是未定义的,我不知道为什么,有什么想法吗?
if(mozilla){
$('body').on('dragover', function (e) {
<?php // hack because if not breaks browser ?>
if($('#customIframe').length > 0){
return;
}
e.originalEvent.stopPropagation();
e.originalEvent.preventDefault();
if ((!$('#smartUploadOverlay').is (':visible') ||
($('#smartUploadPopup').is (':visible')
&& !$('#smartUploadDrag').is (':visible'))) &&
e.originalEvent.dataTransfer.types.length < 5 &&
e.originalEvent.dataTransfer.types.contains("Files")){
smartUploader.toggle();
}
});
$('body').on('dragleave', function (e) {
<?php // hack because if not breaks browser ?>
if($('#customIframe').length > 0){
return;
}
e.originalEvent.stopPropagation();
e.originalEvent.preventDefault();
if ($('#smartUploadOverlay').is (':visible') &&
e.originalEvent.dataTransfer.types.length < 5 &&
e.originalEvent.dataTransfer.types.contains("Files")){
smartUploader.toggle();
}
});
$('#smartUploadOverlay').hover(
function () {
$('#smartUploadDrag').removeClass('hover');
},
function () {
$('#smartUploadDrag').addClass('hover');
});
} else {
$('body').on('dragenter', function (e) {
<?php // hack because if not breaks browser ?>
if($('#customIframe').length > 0){
return;
}
if (ie && !ie10 && $('.alertErrorMessageContainer').length == 0){
showAlertMessage('<?php echo langEcho("drag:n:drop:not:supported")?>');
return;
}
e.originalEvent.stopPropagation();
e.originalEvent.preventDefault();
if ( e.originalEvent.dataTransfer
&& (
( e.originalEvent.dataTransfer.files
&& e.originalEvent.dataTransfer.files.length > 0)
|| ( $.isArray(e.originalEvent.dataTransfer.types)
&& e.originalEvent.dataTransfer.types.indexOf("Files") > -1)
|| ( e.originalEvent.dataTransfer.types
&& !$.isArray(e.originalEvent.dataTransfer.types)
&& e.originalEvent.dataTransfer.types.contains("Files"))
)
){
smartUploader.toggle();
}
});
$('body').on('dragleave', function (e) {
<?php // hack because if not breaks browser ?>
if($('#customIframe').length > 0){
return;
}
if (ie && !ie10){
return;
}
e.originalEvent.stopPropagation();
e.originalEvent.preventDefault();
if ( e.originalEvent.dataTransfer
&& (
( e.originalEvent.dataTransfer.files
&& e.originalEvent.dataTransfer.files.length > 0)
|| ( $.isArray(e.originalEvent.dataTransfer.types)
&& e.originalEvent.dataTransfer.types.indexOf("Files") > -1)
|| ( e.originalEvent.dataTransfer.types
&& !$.isArray(e.originalEvent.dataTransfer.types)
&& e.originalEvent.dataTransfer.types.contains("Files"))
)
){
smartUploader.toggle();
}
});
DataTransfer.types
......
As of Firefox 52, theDataTransfer.types
property returns a frozen array ofDOMStrings
as per spec, rather than aDOMStringList
.从Firefox 52开始,
DataTransfer.types
属性将按规范返回冻结的DOMStrings
数组,而不是DOMStringList
。
The obsolete DomStringList
type has a .contains()
method but not an Array
过时的
DomStringList
类型具有.contains()
方法,但没有Array
Use .includes()
or .indexOf()
instead 使用
.includes()
或.indexOf()
代替
if (e.originalEvent.dataTransfer.types.includes("Files")) { ... }
Or 要么
if (e.originalEvent.dataTransfer.types.indexOf("Files") > -1) { ... }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.