Reputation: 3
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". After some debugging I found out that "e" is undefined and I don't know why, any ideas?
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();
}
});
Upvotes: 0
Views: 557
Reputation: 21881
DataTransfer.types
...
As of Firefox 52, theDataTransfer.types
property returns a frozen array ofDOMStrings
as per spec, rather than aDOMStringList
.
The obsolete DomStringList
type has a .contains()
method but not an Array
Use .includes()
or .indexOf()
instead
if (e.originalEvent.dataTransfer.types.includes("Files")) { ... }
Or
if (e.originalEvent.dataTransfer.types.indexOf("Files") > -1) { ... }
Upvotes: 1