त्रुटि: 'नोड' पर 'परिशिष्ट' निष्पादित करने में विफल: पैरामीटर 1 'नोड' प्रकार का नहीं है


130

मैं एक छवि को एक div पर खींचने और छोड़ने की कोशिश कर रहा हूं। छवि को div पर खींचा नहीं जाता है और निम्न त्रुटि देता है

Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.draganddrop.html:20 dropdraganddrop.html:26 ondrop

कोड

  <!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>

5
document.getElementByIdसंभावना है कि अशक्त लौट रहा है,data
SmokeyPHP

1
आप उपयोग करते हैं ev.target.appendChild(document.getElementById(data));लेकिन अगर आईडी के साथ कोई तत्व नहीं है dataतो document.getElementByIdवापस आ जाएगा null। तो ev.target.appendChild(null)फेंक देंगे।
ओरिऑल नोव

यह कहते हैं कि अनकैप्ड टाइपर: अपरिभाषित एक फंक्शनकॉम्पर नहीं है। html: 92 ऑनड्रागस्टार्ट
माइंडब्रेन

जवाबों:


201

यह वास्तव में एक सरल जवाब है।

आपका फ़ंक्शन divनोड के बजाय एक स्ट्रिंग लौटा रहा है । appendChildकेवल एक नोड संलग्न कर सकते हैं।

उदाहरण के लिए, यदि आप स्ट्रिंग को जोड़ना चाहते हैं:

var z = '<p>test satu dua tiga</p>'; // is a string 
document.body.appendChild(z);

उपरोक्त कोड कभी काम नहीं करेगा। क्या काम करेगा:

var z = document.createElement('p'); // is a node
z.innerHTML = 'test satu dua tiga';
document.body.appendChild(z);

@ एसएमनसुद, यह ऊपर और व्यावहारिक रूप से आजकल हर परियोजना में शामिल है।
Lodewijk

बुरा सवाल है लेकिन क्या हमें अपील करने के बाद नए बनाए गए तत्व को निकालना होगा? मैं इसे कुछ स्थितियों के रूप में पूछ रहा हूं जहां एक लूप होगा और लू के अंदर बच्चे के विकल्प होंगे। क्या डोम में कोई मेमोरी इश्यू या अधिक कचरा तत्व बनाए जाएंगे?
कुरकुला

इस मामले में आपको एक अतिरिक्त <p> टैग मिलेगा।
कुरकुला

13

यह तब हो सकता है यदि आप गलती से उस तत्व को नहीं खींच रहे हैं जिसमें एक आईडी असाइन किया गया है (उदाहरण के लिए आप आसपास के तत्व को खींच रहे हैं)। उस स्थिति में आईडी खाली है और फ़ंक्शन ड्रैग () एक खाली मान प्रदान कर रहा है जिसे तब ड्रॉप करने के लिए पास किया गया है () और वहां विफल रहता है।

अपने सभी तत्वों, जैसे tds, divs, या जो भी आपके ड्रैग करने योग्य तत्व के आस-पास है, उन्हें आईडी निर्दिष्ट करने का प्रयास करें।


5

मेरे मामले में, कोई स्ट्रिंग नहीं थी जिस पर मैं कॉल कर रहा था appendChild, जिस ऑब्जेक्ट को मैं appendChildतर्क पर पारित कर रहा था वह गलत था, यह एक सरणी था और मैंने एक तत्व ऑब्जेक्ट पास किया था, इसलिए मैंने divel.appendChild(childel[0])इसके बजाय उपयोग किया divel.appendChild(childel)और यह काम किया। आशा है कि यह किसी की मदद करेगा।



0

आप भी उपयोग कर सकते हैं element.insertAdjacentHTML('beforeend', data);

कृपया MDN पर "सुरक्षा विचार" पढ़ें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.