Estoy tratando de arrastrar y soltar una imagen en un div. La imagen no se arrastra al div y da el siguiente error
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
fuente
                
                fuente

document.getElementByIdes probable que regrese nulo, verifique el valor dedataev.target.appendChild(document.getElementById(data));pero si no hay ningún elemento con id,dataentoncesdocument.getElementByIdregresaránull. Asíev.target.appendChild(null)lo lanzará.Respuestas:
En realidad es una respuesta simple.
Su función está devolviendo una cadena en lugar del
divnodo.appendChildsolo puede agregar un nodo.Por ejemplo, si intentas agregarChild la cadena:
El código anterior nunca funcionará. Lo que funcionará es:
fuente
Esto puede suceder si accidentalmente no está arrastrando el elemento que tiene una identificación asignada (por ejemplo, está arrastrando el elemento circundante). En ese caso, la ID está vacía y la función drag () está asignando un valor vacío que luego se pasa a drop () y falla allí.
Intente asignar los identificadores a todos sus elementos, incluidos los tds, divs o lo que esté alrededor de su elemento arrastrable.
fuente
En mi caso, no había una cadena en la que estaba llamando
appendChild, el objeto que estaba pasando en elappendChildargumento estaba equivocado, era una matriz y había pasado un objeto elemento, así que usé endivel.appendChild(childel[0])lugar dedivel.appendChild(childel)y funcionó. Espero que ayude a alguien.fuente
usar en
ondragstart(event)lugar deondrag(event)fuente
También puedes usar
element.insertAdjacentHTML('beforeend', data);Lea las "Consideraciones de seguridad" en MDN .
fuente