Javascript - используйте функцию обратного вызова с addEventListener для кнопки «удалить все» - PullRequest
0 голосов
/ 24 декабря 2018

Я добавляю кнопку «удалить все» в расширение Chrome, которое, как следует из названия, должно использоваться для удаления всех сохраненных ссылок.

Кнопка работает только после того, как я сначала выполнил какое-то другое действие (добавление ссылки, удаление ссылки и т. Д.), Но, конечно, я хочу, чтобы она сработала сразу.

Я прочитал, что это может быть связано с асинхронностью кода, поэтому я попытался ввести функцию обратного вызова с помощью этого вопроса: Добавить обратный вызов в .addEventListener , однако он все еще выполняетТо же самое, что и раньше, так что, возможно, проблема не в этом, или я неправильно прочитал другой вопрос.Я ценю любые советы, поэтому спасибо заранее.Я постараюсь выяснить это сам в то же время.

var urlList = [];
var i = 0;

document.addEventListener('DOMContentLoaded', function() {
  getUrlListAndRestoreInDom();
  // event listener for the button inside popup window
  document.getElementById('save').addEventListener('click', addLink);
});

function addLink() {
  var url = document.getElementById("saveLink").value;
  addUrlToListAndSave(url);
  addUrlToDom(url);
}

function getUrlListAndRestoreInDom() {
  chrome.storage.local.get({
    urlList: []
  }, function(data) {
    urlList = data.urlList;
    urlList.forEach(function(url) {
      addUrlToDom(url);
    });
  });
}

function addUrlToDom(url) {
  // change the text message
  document.getElementById("saved-pages").innerHTML = "<h2>Saved pages</h2>";
  var newEntry = document.createElement('li');
  var newLink = document.createElement('a');
  var removeButton = document.createElement('button');

  removeButton.textContent = "Remove";
  removeButton.type = "button";
  removeButton.className = "remove";
  removeButton.addEventListener("click", function() {
    var anchor = this.previousElementSibling;
    var url = anchor.getAttribute("href");
    removeUrlAndSave(url);
    this.parentNode.remove();
  });

  newLink.textContent = url;
  newLink.setAttribute('href', url);
  newLink.setAttribute('target', '_blank');

  newEntry.appendChild(newLink);
  newEntry.appendChild(removeButton);

  newEntry.className = "listItem";

  document.getElementById("list").appendChild(newEntry);
}

function removeUrlAndSave(url) {
  var index = urlList.indexOf(url);
  if (index != -1) {
    urlList.splice(index, 1);
    saveUrlList();
  }
}


function addUrlToListAndSave(url) {
  urlList.push(url);
  saveUrlList();
  //}
}

function saveUrlList(callback) {
  chrome.storage.local.set({
    urlList
    // }, function() {
    //   if (typeof callback === 'function') {
    //     //If there was no callback provided, don't try to call it.
    //     callback();
    //   }
    // });
  });

  function removeMe(i) {
    var fullList = documents.getElementsByClassName('listItem');
    listItem[i].parentNode.removeChild(listItem[i]);
  }

  function removeAll() {
    var removeList = document.getElementsByClassName("listItem");
    while (removeList[0]) {
      removeList[0].parentNode.removeChild(removeList[0]);
    };
  }

  function registerElement(callback) {
    var element = document.getElementById("remove-all-button");
    element.addEventListener("click", callback);
  }

  registerElement(removeAll);
 #list {
	min-height: 360px;
	max-height: 360px;
	width: 300px;
	margin: auto;
	overflow: scroll;
}
<head>
  <script type="text/javascript" src="popup.js"></script>
  <link rel="stylesheet" href="popup.css">
</head>

<body>
  <div>
    <span id="hot-button"><a href="hot-drops.html">Hot Drops</a></span>

    <li id="removeAll">
      <button id="remove-all-button"> Remove All</button>
    </li>

    <span id="saved-pages"></span>
    <div>
      <ul id="list"></ul>

    </div>
  </div>

  <input type="button" id="save" value="Add">
  <input type="text" id="saveLink" name="member" value=""><br/>
  <span id="settings-button"><a href="settings.html">Settings</a></span>

</body>

</html>

1 Ответ

0 голосов
/ 25 декабря 2018

вот и все

jsfiddle

had to write this line to post link

http://jsfiddle.net/1w69bo8k/ - вы допустили много ошибок, когда помещали определенный код в использованиеПеременные, которые я никогда не видел, чтобы они были определены где-либо в коде (вы продолжаете редактировать вопрос, я перешел от этой предоставленной вами скрипки)

измените обратно на вашу функцию getUrlListAndRestoreInDom, удалите код хранения

вы обновляетехранилище и urlList вручную, лучше сделайте это после успешного обновления локального

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