2015-03-10 2 views
1

Я пытаюсь удалить файлы в папку на моем веб-сайте. Он отлично работает в хроме, но событие не срабатывает в сафари. Кажется, я получаю событие drop, запущенное через файлы. Хотя он работает, если я перетаскиваю элементы на веб-сайте.Safari jQuery on ('drop') не работает с файлами

  $(document).on('dragstart', '.mtdrg', dragStart); 
      $(document).on('dragenter', '.mtdrp', dragEnter); 
      $(document).on('dragover', '.mtdrp', dragOver); 
      $(document).on('dragleave', '.mtdrp', dragLeave); 
      $(document).on('drop', '.mtdrp', drop); 
      $(document).on('dragend', '.mtdrp', dragEnd); 

    dragStart = function (e) { 
     var element = $(this), 
      instanceid = element.data('instanceid'), 
      entitytype = element.data('entitytype'), 
      vmtype = element.data('vmtype'); 

     if (!isAnyMoveAllowed(entitytype, vmtype)) { 
      e.preventDefault(); 
      return false; 
     } 

     $(document.documentElement).addClass('dragActive'); 

     origBackgroundColor = $(this).css('backgroundColor'); 

     this.style.opacity = 0.8; 
     this.style.backgroundColor = 'rgba(0, 161, 255,.75)'; 

     e.originalEvent.dataTransfer.effectAllowed = 'move'; 

     setDragData(instanceid, entitytype, vmtype); 
    }; 

    dragOver = function (e) { 
     if (e.preventDefault) { 
      e.preventDefault(); // Necessary. Allows us to drop. 
     } 

     $(document.documentElement).addClass('dragActive'); 

     var targetEntityType = $(this).data('entitytype'); 
     var targetViewModelType = $(this).data('vmtype'); 

     if (isMoveAllowed(targetEntityType, targetViewModelType, e)) { 
      e.originalEvent.dataTransfer.dropEffect = 'move'; 
     } else { 
      e.originalEvent.dataTransfer.dropEffect = 'none'; 
     } 

     return false; 
    }; 

    dragEnter = function() { 
     $(this).addClass('mtdrpHover'); 
    }; 

    dragLeave = function() { 
     $(this).removeClass('mtdrpHover'); 
    }; 

    drop = function (e) { 
     if (e.stopPropagation) { 
      e.stopPropagation(); // stops the browser from redirecting. 
     } 

     if (e.originalEvent.dataTransfer.types != null) { 
      if (e.originalEvent.dataTransfer.files.length > 0) { 

       $(document.documentElement).removeClass('dragActive'); 
       $(this).removeClass('mtdrpHover'); 

       performFileDrop($(this).data('instanceid'), e); 
       return false; 
      } 
     } 

     var x = e.originalEvent.offsetX; 
     var y = e.originalEvent.offsetY; 

     performDrop($(this).data('instanceid'), $(this).data('dropcontroller'), $(this).data('dropaction'), x, y); 

     return false; 
    }; 

ответ

0

Мне нужно остановить распространение и предотвратить использование по умолчанию в серверных событиях для его работы.

dragOver = function (e) { 
     if (e.preventDefault) { 
      e.preventDefault(); // Necessary. Allows us to drop. 
      e.stopPropagation(); 
     } 
    }; 

    dragEnter = function (e) { 
     e.preventDefault(); 
     e.stopPropagation(); 

     $(this).addClass('mtdrpHover'); 
    }; 

    drop = function (e) { 
     if (e.stopPropagation) { 
      e.preventDefault(); 
      e.stopPropagation(); // stops the browser from redirecting. 
     } 
    }; 
Смежные вопросы