Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.12.2017, 09:34
Новичок на форуме
Отправить личное сообщение для TheHateInMe Посмотреть профиль Найти все сообщения от TheHateInMe
 
Регистрация: 20.12.2017
Сообщений: 1

Некорректно обрабатывается событие на чекбоксе после выгрузки из localstorage
Всем здравствуйте. Благодаря подсказке из своего прошлого вопроса научился при нажатии на checkbox удалять строку таблицы, в котором он находился. Но моя задача усложнилась - после каждой манипуляции я загружаю актуальную таблицу в localstorage. С этим все ОК. Далее я обновляю страницу и забираю из хранилища свою таблицу (ну чтобы данные не потерялись) - тут тоже все супер. Но событие на checkbox при этом теряется и я пытаюсь объявить его снова с помощью той же конструкции, которая успешно срабатывает при добавлении элементов таблицу. Вот этот кусочек:
var ShoppingList = localStorage.getItem('ShoppingList'); //тут я получаю всю табличку
    if (ShoppingList !== null) {
        document.getElementById('myTable').innerHTML = ShoppingList;
    }
        var checkbox = document.getElementById('checkbox_id'); //тут я получаю конкретно чекбокс
    checkbox.addEventListener("click", function (elemCheck) { // ну а тут я вроде как должен присвоить ему событие
        var checkboxElement = elemCheck.target;
        var elCheck = checkboxElement.parentElement.parentElement;
        elCheck.parentElement.removeChild(elCheck);
        localStorage.setItem("ShoppingList", document.getElementById("myTable").innerHTML); // и кладу обратно в хранилище
    });


Но после F5 первая строка таблицы удаляется, а на остальных кликанье по чекбоксу ни к чему не приводит. Почему так происходит? В чем мой косяк? Уже совсем запутался. Подскажите пожалуйста. Более полный листинг прилагаю. Спасибо.

main.js
function insertRow(id) {
  var tbody = document.getElementById(id).getElementsByTagName("tbody")[0];
  var row;
  row = document.createElement("tr");
  row.setAttribute("id", "tr_id");
  var cellCounter = document.getElementById("myTable").rows.length;

  var td1 = document.createElement("td");
  td1.setAttribute("id", "td1_id");
  td1.appendChild(document.createTextNode(cellCounter));

  var td2 = document.createElement("td");
  td2.setAttribute("id", "td2_id");
  var checkbox = document.createElement("input");
  checkbox.setAttribute("type", "checkbox");
  checkbox.setAttribute("id", "checkbox_id");
  checkbox.addEventListener("click", function(elemCheck) {
    var checkboxElement = elemCheck.target;
    var elCheck = checkboxElement.parentElement.parentElement;
    elCheck.parentElement.removeChild(elCheck);
    localStorage.setItem("ShoppingList", document.getElementById("myTable").innerHTML);
  });
  td2.appendChild(checkbox);

  var td3 = document.createElement("td");
  td3.setAttribute("id", "td3_id");
  td3.appendChild(document.createTextNode(document.getElementById("add_id").value));

  var td4 = document.createElement("td");
  td4.setAttribute("id", "td4_id");
  td4.appendChild(document.createTextNode(document.getElementById("quant_id").value));

  var td5 = document.createElement("td");
  td5.setAttribute("id", "td5_id");
  td5.appendChild(document.createTextNode(document.getElementById("price_id").value));

  var td6 = document.createElement("td");
  td6.setAttribute("id", "td6_id");
  var btnEdit = document.createElement("input");
  btnEdit.setAttribute("class", "btnEdit");
  btnEdit.src = "icons/edit.png";
  btnEdit.type = "image";
  btnEdit.addEventListener('click', function() {
    editButton();
    return false;
  });
  td6.appendChild(btnEdit);

  var deleteButton = document.createElement("input");
  deleteButton.setAttribute("class", "deleteButton");
  deleteButton.src = "icons/delete.png";
  deleteButton.type = "image";
  deleteButton.addEventListener('click', function(elemDel) {
    var deleteElement = elemDel.target;
    var elDel = deleteElement.parentElement.parentElement;
    elDel.parentElement.removeChild(elDel);
    localStorage.setItem("ShoppingList", document.getElementById("myTable").innerHTML);
  });
  td6.appendChild(deleteButton);
  td6.setAttribute("colspan", "2");
  row.appendChild(td1);
  row.appendChild(td2);
  row.appendChild(td3);
  row.appendChild(td4);
  row.appendChild(td5);
  row.appendChild(td6);
  tbody.appendChild(row);

  localStorage.setItem("ShoppingList", document.getElementById("myTable").innerHTML);
}

function indexLS() {
  var ShoppingList = localStorage.getItem('ShoppingList');
  if (ShoppingList !== null) {
    document.getElementById('myTable').innerHTML = ShoppingList;
  }
  var checkbox = document.getElementById('checkbox_id');
  checkbox.addEventListener("click", function(elemCheck) {
    var checkboxElement = elemCheck.target;
    var elCheck = checkboxElement.parentElement.parentElement;
    elCheck.parentElement.removeChild(elCheck);
    localStorage.setItem("ShoppingList", document.getElementById("myTable").innerHTML);
  });

}



index.html
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <link href="css/style.css" rel="stylesheet">
  <title>Cart</title>
</head>

<body onload="indexLS();return false;" class="body">
  <div class="menu">
    <ul class="list">
      <li class="li_index"><a class="link_index" href="index.html">Shopping list</a></li>
      <li class="li"><a class="link" href="done.html">Done</a></li>
      <li class="li"><a class="link" href="deleted.html">Deleted</a></li>
    </ul>
  </div>
  <div class="main">
    <h1 class="h1">Shopping List</h1>
    <hr class="hr">
    <div class="inputs">
      <input class="input_add" type="text" id="add_id" placeholder="Add items to you Shopping List">
      <input class="input_quant" type="text" id="quant_id" placeholder="Quant.">
      <input class="input_price" type="text" id="price_id" placeholder="Price">
      <button class="input_button" type="button" onclick="insertRow('myTable');return false;">Add</button>
    </div>
  </div>

  <div class="table">
    <table class="mytable" id="myTable" cellspacing="0" border="1">
      <tbody id="tbody">
        <tr id="tr_id" class="tr">
          <td>#</td>
          <td>Done</td>
          <td>Item</td>
          <td>Quantity</td>
          <td>Price $</td>
          <td colspan="2" width="100">Action</td>
        </tr>
      </tbody>
    </table>
  </div>

</body>
<script src="js/main.js"></script>

</html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не сохраняется localStorage после перезагрузки браузера Бобр Firefox/Mozilla 1 20.10.2011 20:31
Событие hover только после 2 секунд niksan jQuery 7 12.08.2010 14:16
Событие после обновления страницы ajax'ом kryzhovnik Events/DOM/Window 4 07.10.2009 22:32
Как вызвать событие после события определенного в onchange Наталья Events/DOM/Window 2 12.09.2009 13:51
У элемента img внутри form пропадает событие после onsubmit формы Eugene Events/DOM/Window 2 18.06.2009 19:21