2013-07-05 2 views
1

이 코드를 사용하여 페이지의 일부 항목을 드래그/드롭 가능하게 만듭니다. IE/FF/Chrome에서는 모두 정상이지만 Safari에서는 문제가 발생합니다. 각 이벤트에 일부 console.log()를 넣으면, 가장 중요한 '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'이벤트가 여전히 작동하지 않습니다. –

관련 문제