简体   繁体   English

仅在Firefox中未定义“ e”

[英]“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, the DataTransfer.types property returns a frozen array of DOMStrings as per spec, rather than a DOMStringList . 从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM