dataTransfer.getData()無法獲取資料

admin發表於2019-10-10

通過dataTransfer.getData()方法可以獲取通過dataTransfer物件傳遞的資料。

關於dataTransfer物件傳遞的資料做一下簡單介紹:

(1).通過dataTransfer.setData()方法自定義的資料。

(2).拖拽的文或者從作業系統向瀏覽器拖拽檔案,無需使用setData()方法自定義。

但是dataTransfer.getData()方法有時候卻無法獲取資料。

當然出現的原因可能多種,下面介紹一下比較典型的一種,初學者比較容易在這方面出現失誤。

下面進行一下簡單演示:

[HTML] 純文字檢視 複製程式碼執行程式碼
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type="text/css">
p{
  width:100px;
  height:50px;
  background-color:red;
}
#box {
  width:300px; 
  height:100px;
  background-color:#ccc;
}
</style>
<script>
window.onload = (ev) => {
  let odiv=document.getElementById("box");
  let op=document.getElementById("p");
  
  op.ondragstart = (ev) => {
    ev.dataTransfer.setData("Text",ev.target.id);
  }
  
  odiv.ondragover = (ev) => {
    ev.preventDefault();
  }
  odiv.ondragenter = (ev) => {
    console.log(ev.dataTransfer.getData("Text"));
  }

  odiv.ondrop = (ev) => {
    ev.preventDefault();
    ev.stopPropagation();
    let data=ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
  }
}
</script>
</head>
<body>
<p draggable="true" id="p"></p>
<div id="box"></div>
</body>
</html>

在谷歌控制檯並沒有列印出p元素的id屬性值。

這是因為要呼叫dataTransfer.getData()方法獲取資料需要在drop 事件處理函式中。

相關文章