J'essaye de faire glisser et déposer une image sur un div. L'image ne se fait pas glisser sur le div et donne l'erreur suivante
Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.draganddrop.html:20 dropdraganddrop.html:26 ondrop
Code
<!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
la source
la source
document.getElementById
renvoie probablement null, vérifiez la valeur dedata
ev.target.appendChild(document.getElementById(data));
mais s'il n'y a pas d'élément avec l'ID,data
alorsdocument.getElementById
retourneranull
. Alorsev.target.appendChild(null)
va jeter.Réponses:
C'est en fait une réponse simple.
Votre fonction renvoie une chaîne plutôt que le
div
nœud.appendChild
ne peut ajouter qu'un nœud.Par exemple, si vous essayez d'appendChild la chaîne:
Le code ci-dessus ne fonctionnera jamais. Ce qui fonctionnera est:
la source
Cela peut se produire si vous ne faites pas glisser accidentellement l'élément auquel un identifiant est attribué (par exemple, vous faites glisser l'élément environnant). Dans ce cas, l'ID est vide et la fonction drag () attribue une valeur vide qui est ensuite passée à drop () et y échoue.
Essayez d'attribuer les identifiants à tous vos éléments, y compris les tds, divs ou tout ce qui se trouve autour de votre élément déplaçable.
la source
Dans mon cas, il n'y avait pas de chaîne sur laquelle j'appelais
appendChild
, l'objet que je passais enappendChild
argument était faux, c'était un tableau et j'avais passé un objet élément, alors j'ai utilisé à ladivel.appendChild(childel[0])
placedivel.appendChild(childel)
et cela a fonctionné. J'espère que cela aidera quelqu'un.la source
utiliser
ondragstart(event)
au lieu deondrag(event)
la source
Vous pouvez également utiliser
element.insertAdjacentHTML('beforeend', data);
Veuillez lire les «considérations de sécurité» sur MDN .
la source