Estou tentando arrastar e soltar uma imagem em uma div. A imagem não é arrastada para a div e gera o seguinte erro
Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.draganddrop.html:20 dropdraganddrop.html:26 ondrop
Código
<!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
fonte
fonte
document.getElementById
provavelmente está retornando nulo, verifique o valor dedata
ev.target.appendChild(document.getElementById(data));
mas se não houver elemento com iddata
,document.getElementById
ele retornaránull
. Entãoev.target.appendChild(null)
vai jogar.Respostas:
Na verdade, é uma resposta simples.
Sua função está retornando uma string em vez do
div
nó.appendChild
só pode acrescentar um nó.Por exemplo, se você tentar anexarChild a sequência:
O código acima nunca funcionará. O que vai funcionar é:
fonte
Isso pode acontecer se você acidentalmente não estiver arrastando o elemento que possui um ID atribuído (por exemplo, você está arrastando o elemento circundante). Nesse caso, o ID está vazio e a função drag () está atribuindo um valor vazio que é passado para drop () e falha lá.
Tente atribuir os IDs a todos os seus elementos, incluindo tds, divs ou o que estiver ao redor do seu elemento arrastável.
fonte
No meu caso, não havia nenhuma string na qual eu estava chamando
appendChild
, o objeto que eu estava passando noappendChild
argumento estava errado, era uma matriz e eu tinha passado um objeto de elemento, então usei emdivel.appendChild(childel[0])
vez dedivel.appendChild(childel)
e funcionou. Espero que ajude alguém.fonte
use em
ondragstart(event)
vez deondrag(event)
fonte
Você também pode usar
element.insertAdjacentHTML('beforeend', data);
Por favor, leia as "Considerações de segurança" no MDN .
fonte