Saya mencoba untuk menarik dan melepaskan gambar pada div. Gambar tidak diseret ke div dan memberikan kesalahan berikut
Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.draganddrop.html:20 dropdraganddrop.html:26 ondrop
Kode
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Creativity Dashboard</title>
<!-- Required CSS -->
<link href="css/movingboxes.css" rel="stylesheet">
<link href="css/compare.css" rel="stylesheet">
<!--[if lt IE 9]>
<link href="css/movingboxes-ie.css" rel="stylesheet" media="screen">
<![endif]-->
<!-- Required script -->
<script src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script src="js/jquery.movingboxes.js"></script>
<!-- Demo only -->
<link href="demo/demo.css" rel="stylesheet">
<script src="demo/demo.js"></script>
<script>
function allowDrop(ev) {
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
</script>
<style>
/* Overall & panel width defined using css in MovingBoxes version 2.2.2+ */
#slider-one {
width: 1003px;
}
#slider-one>li {
width: 150px;
}
</style>
</head>
<body>
<div class="wrapper">
<!-- Slider #1 -->
<ul id="slider-one">
<li><img id="drag1" src="demo/1.jpg" draggable="true"
ondragstart="drag(event)" alt="picture"></li>
<li><img id="drag2" src="demo/2.jpg" draggable="true"
ondragstart="drag(event)" alt="picture"></li>
<li><img id="drag3" src="demo/3.jpg" draggable="true"
ondragstart="drag(event)" alt="picture"></li>
<li><img id="drag5" src="demo/4.jpg" draggable="true"
ondragstart="drag(event)" alt="picture"></li>
<li><img id="drag6" src="demo/5.jpg" draggable="true"
ondragstart="drag(event)" alt="picture"></li>
<li><img id="drag7" src="demo/6.jpg" draggable="true"
ondragstart="drag(event)" alt="picture" id="astronaut"></li>
<li><img id="drag8" src="demo/7.jpg" draggable="true"
ondragstart="drag(event)" alt="picture"></li>
</ul>
<!-- end Slider #1 -->
<div id="dragAnddrop" ondrop="drop(event)"
ondragover="allowDrop(event)" style="width: 12em; height: 12em">
</div>
</div>
<div>
<div class="left">
<img id="drag" draggable="true" ondragstart="drag(event)"
src="images/startingImage.jpg" style="width: 12em;" alt="picture">
</div>
<div class="middle ">
<img id="image3" src="images/startingImage.jpg" class="image-size"
alt="picture" draggable="true" ondragstart="drag(event)"> <img
src="images/harvest.jpg" class="image-size" alt="picture">
</div>
<div class="right">
<img src="images/startingImage.jpg" style="width: 12em;"
alt="picture">
</div>
</div>
</body>
</html>
javascript
html
MindBrain
sumber
sumber
document.getElementById
kemungkinan kembali nol, periksa nilaidata
ev.target.appendChild(document.getElementById(data));
tetapi jika tidak ada elemen dengan iddata
makadocument.getElementById
akan kembalinull
. Jadiev.target.appendChild(null)
akan melempar.Jawaban:
Ini sebenarnya jawaban yang sederhana.
Fungsi Anda mengembalikan string daripada
div
simpul.appendChild
hanya dapat menambahkan simpul.Misalnya, jika Anda mencoba menambahkanTambahkan string:
Kode di atas tidak akan pernah berfungsi. Apa yang akan berhasil adalah:
sumber
Ini dapat terjadi jika Anda secara tidak sengaja menyeret elemen yang memang memiliki id yang ditetapkan (misalnya Anda menyeret elemen di sekitarnya). Dalam hal ini ID kosong dan fungsi seret () menetapkan nilai kosong yang kemudian diteruskan ke drop () dan gagal di sana.
Coba tetapkan id untuk semua elemen Anda, termasuk tds, divs, atau apa pun yang ada di sekitar elemen yang dapat diseret.
sumber
Dalam kasus saya, tidak ada string yang saya panggil
appendChild
, objek yang sayaappendChild
sampaikan pada argumen salah, itu adalah array dan saya telah melewati objek elemen, jadi saya menggunakandivel.appendChild(childel[0])
alih-alihdivel.appendChild(childel)
dan itu berfungsi. Semoga ini bisa membantu seseorang.sumber
gunakan
ondragstart(event)
sebagai gantiondrag(event)
sumber
Anda juga dapat menggunakan
element.insertAdjacentHTML('beforeend', data);
Silakan baca "Pertimbangan Keamanan" di MDN .
sumber