2013-07-05 49 views
1

我使用此代碼在頁面上拖動/放置一些項目。 在IE/FF/Chrome上一切正常,但在Safari上我遇到了一些麻煩。 在每個事件上添加一些console.log(),我發現所有事件都被safari識別,除了最重要的「drop」事件。addEventListener'drop'在Safari上不起作用

任何人都可以找到解決方案,使此代碼也在Safari上工作嗎?

prepareDrag:function() { 
    if (Modernizr.draganddrop) { 
     var dragged = $SHS.j('a'); 
     $SHS.j.each(dragged, function (index, value) { 
      value.addEventListener('dragstart', function (e) { 
       try { 
        var img = $SHS.j(this).find('img'); 
        if ((img[0].nodeName).toUpperCase() == 'IMG') { 
         var commandData = img[0].src + '|' + value.href; 
         //Do Stuff 
        } else throw 'Non valido'; 
       } catch (err) { 
        //Errore 
       } 
      }, false); 
      value.addEventListener('dragend', function (e) { 
       //Do Stuff 
      }, false); 
     }); 
    } 
}, 
prepareDrop:function() { 
    if (Modernizr.draganddrop) { 
     var dropper = document.getElementById('dropArea'); 
     dropper.addEventListener('dragenter', function (e) { 
      $SHS.j("#dropArea").addClass('drop-over'); 
     }, false); 

     dropper.addEventListener('drop', function (e) { 
      e.stopPropagation(); 
      e.preventDefault(); 
      $SHS.j("#dropArea").removeClass('drop-over'); 
      //Do stuff 
     }, false); 

     dropper.addEventListener('dragover', function (e) { 
      e.stopPropagation(); 
      if (e.preventDefault) { 

       e.preventDefault(); 
      } 
      $SHS.j("#dropArea").addClass('drop-over'); 
     }, false); 

     dropper.addEventListener('dragleave', function (e) { 
      $SHS.j("#dropArea").removeClass('drop-over'); 
     }, false); 

    } else { 

    } 
}, 

回答

0

你必須呼籲dragentere.preventDefault();爲好。

+0

我剛剛嘗試過,但'drop'事件仍然不起作用 –