ত্রুটি: 'নোড' এ 'অ্যাপেন্ডচিল্ড' চালানোতে ব্যর্থ: প্যারামিটার 1 'নোড' টাইপের নয়


130

আমি একটি ডিভিভিতে একটি চিত্র টেনে আনার চেষ্টা করছি। চিত্রটি ডিভের উপর টেনে আনবে না এবং নিম্নলিখিত ত্রুটিটি দেয়

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));কিন্তু যদি ID সহ কোনো উপাদান dataতারপর document.getElementByIdফিরে আসবে null। তাই ev.target.appendChild(null)নিক্ষেপ করবে।
ওরিওল

এরা বলছে Uncaught TypeError: 92 ondragstart: অনির্ধারিত একটি functioncompare.html নয়
MindBrain

উত্তর:


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);

@ এনএমএনএসড, আজকাল এটি প্রতিটি প্রকল্পের উপরে এবং কার্যত অন্তর্ভুক্ত রয়েছে।
লোডেভিজক

খারাপ প্রশ্ন তবে এডিংয়ের পরে কি আমাদের নতুন তৈরি উপাদানটি সরিয়ে ফেলতে হবে? আমি এটি এমন কিছু পরিস্থিতিতে জিজ্ঞাসা করছি যেখানে একটি লুপ থাকবে এবং ভিতরে ভিতরে লুয়ের বিকল্প থাকবে। ডোমে তৈরির কোনও স্মৃতি সমস্যা বা আরও বেশি আবর্জনা উপাদান থাকবে?
কুর্কুলা

এই ক্ষেত্রে আপনি একটি অতিরিক্ত <p> ট্যাগ পাবেন।
কুরকুলা

13

এটি ঘটতে পারে যদি আপনি দুর্ঘটনাক্রমে কোনও আইডি নির্ধারিত উপাদানটিকে টেনে আনেন না (উদাহরণস্বরূপ আপনি আশেপাশের উপাদানটি টানছেন)। সেক্ষেত্রে আইডি খালি এবং ফাংশন টেনে আনার () একটি ফাঁকা মান বরাদ্দ করা হয় যা পরে ড্রপ () এ প্রেরণ করা হয় এবং সেখানে ব্যর্থ হয়।

টিডিএস, ডিভিডস বা আপনার ড্রাগেবল উপাদানটির চারপাশে যা কিছু রয়েছে তার সহ আপনার সমস্ত উপাদানকে আইডির বরাদ্দ দেওয়ার চেষ্টা করুন।


5

আমার ক্ষেত্রে, আমি স্ট্রিং করছি এমন কোনও স্ট্রিং ছিল না appendChild, আমি যে appendChildযুক্তিতে যুক্তি দিয়ে যাচ্ছিলাম তা ভুল ছিল, এটি একটি অ্যারে ছিল এবং আমি একটি উপাদান উপাদানটি পাস করেছি, সুতরাং আমি এর divel.appendChild(childel[0])পরিবর্তে ব্যবহার করেছি divel.appendChild(childel)এবং এটি কাজ করে worked আশা করি এটি কারও সাহায্য করবে।



0

আপনি ব্যবহার করতে পারেন element.insertAdjacentHTML('beforeend', data);

দয়া করে চালু "সুরক্ষা বিবেচনাগুলি" পড়ুন MDN

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.