JavaScript Динамическое удаление элементов! removeChild - PullRequest
0 голосов
/ 25 мая 2020

Технология, которую я использую, - это материализация и ваниль js. Я создал кнопку материализации, которая открывает модель. Внутри модели находится форма, которая принимает вводимые пользователем данные, а затем помещает вводимый текст на главную страницу при нажатии кнопки «Отправить». то у меня есть кнопка, которая должна удалить / удалить опубликованный ввод. Итак, у меня проблема в том, что JavaScript, связанный с кнопкой, которая должна удалить / removeChild, не работает. помогите пожалуйста :)

// ----------------Models Materialize Framework----------------
document.addEventListener('DOMContentLoaded', () => {
    var elems = document.querySelectorAll('.modal');
    var instances = M.Modal.init(elems);
  });




//Delete From The Dom
const delExerciseBtn = document.querySelector('.del-exercise-btn');

delExerciseBtn.addEventListener('click', (e) => {
if(e.target.className == 'delete'){
  const h6 = e.target.parentElement;
  delExerciseBtn.removeChild(h6);
}

});

// Add User's To the Dom.
const addExerciseDom = document.querySelector('.exercise-dom');
const exerciseForm = document.querySelector('.exercises-form');
const disabledExersiceBtn = document.querySelector('.disabled-exersicebtn');


exerciseForm.addEventListener('submit', (e) => {
e.preventDefault();

  // Get Input Value
  const value = exerciseForm.querySelector('input[type="text"]').value;

  // Create Elements
  const h6 = document.createElement('h6');
  
  // Add Content
  h6.textContent = value;
  
  // Append To Dom
  addExerciseDom.appendChild(h6);  

  //Disable Btn
  disabledExersiceBtn.setAttribute('disabled', 'disabled');


});
<html lang="en">
<head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
      <title></title>

      <!-- Google icons -->
      <link href="https://fonts.googleapis.com/icon?family=Material+Icons"
      rel="stylesheet">

      <!-- Compiled and minified CSS -->
      <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
  
      <!-- Sytle.css -->
      <link rel="stylesheet" type="text/css" href="style.css">
      
    
</head>
<body>
   
<!----- user's input ------->
<div class="row">
  <div class="col s12 center valign-wrapper center-align">
   <div class=" exercise-dom delete"> <!--Users text input h6----> </div>
   </div>
</div>


<!-- Btn/Modals/form -->
   <div class="row">
   <!-- Dom Btn -->
    <div class="col s12 center ">
      <a href="#exercise" class="btn-floating btn-small darken-4 z-depth-2 black center modal-trigger disabled-exersicebtn">
        <i class="material-icons white-text">add </i>
      </a>
    </div>
    
   <!-- Modal/form -->
  <div class="modal modal-position" id="exercise">
   <div class="modal-content">

    <div class="row exercises-padding">
     <form class="col s12 exercises-form" autocomplete="off">
       <div class="input-field col s10"> 
         <i class="material-icons prefix">fitness_center</i>
          <input type="text" id="autocomplete-input"  class="autocomplete center">
            <label for="autocomplete-input" ><h6>Exercises</h6></label>
       </div>
       <div class="modal-footer">
         <input class="modal-close btn black" type="submit" value="Submit">
       </div>
     </form>
    </div>     
   </div>
  </div>
  
  
<!-- Remove Users Btn -->
  <div class="col s12 center remove-padding">
    <a href="#" class="btn-floating btn-small darken-4 z-depth-2 black center modal-trigger del-exercise-btn">
      <i class="material-icons white-text ">remove </i>
    </a>
  </div>
  
  
     <!-- Compiled and minified JavaScript -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
       
     <!-- app.JavaScript -->
    <script src="app.js"></script>
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 30 мая 2020
const h6 = e.target.parentElement;
delExerciseBtn.removeChild(h6);

Вы пытаетесь удалить его родительский элемент с кнопки. И нужно убрать кнопку с родителя.

const h6 = e.target.parentElement;
h6.removeChild(e.target);
0 голосов
/ 26 мая 2020

Обновление:

  • у вас есть ошибка вложения в HTML, </div> отсутствует, поэтому DOM не содержит форму
    1. check DOM с инструментами разработчика, проверив элементы, и вы увидите, что структура неправильная.
    2. вы также можете использовать, например, функцию Codepen «Анализировать HTML» на панели HTML, чтобы проверить свой HTML
  • класс <form> - Exercises-form, а селектор .exercises-form (из const exerciseForm = document.querySelector('.exercises-form');), следовательно, не может найти элемент, как CSS класс имена чувствительны к регистру. exerciseForm затем становится null, что вызывает ошибку Uncaught TypeError: Cannot read property 'addEventListener' of null
  • кнопка удаления по-прежнему не работает. Предлагаю вам попробовать на себе. Используйте инструменты разработчика браузера, особенно инспектор элементов DOM и консоль для интерактивных тестов для ваших запросов селектора (а элемент, который вы выбираете в инспекторе элементов, доступен в консоли как $0). Есть много руководств в поиске Google.

Дополнительное примечание: я заметил, что document.addEventListener('DOMContentLoaded', () => {... уже есть в верхней части файла. Вы можете поместить туда свой код, нет необходимости в другом DOMContentLoaded прослушивателе событий (хотя это тоже не повредит).


Исходный ответ:

Вы получите

Uncaught TypeError: Cannot read property 'addEventListener' of null

, что означает, что

const delExerciseBtn = document.querySelector('.del-exercise-btn');

не смог найти узел и вернул null.

Вероятная причина: код запускается слишком рано, браузер еще не построил DOM .

Решение: оберните свой код в событие DOMContentLoaded обработчик:

window.addEventListener('DOMContentLoaded', (event) => {
    const delExerciseBtn = document.querySelector('.del-exercise-btn');
    // ...
});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...