Javascript localalstorage портит другой код
У меня есть список задач в javascript и я решил использовать localalstorage для сохранения списков. Дело в том, что отдельные кнопки удаления элементов списка теперь не работают, не нажимая кнопку и не нажимая кнопку ввода. Это происходит только на Chrome и Safari. В Firefox все работает нормально, поэтому я не уверен, в чем проблема на самом деле, и это моя первая попытка использовать localalstorage.
Вот вся база кода, так как я не совсем уверен, какая часть может быть причиной проблемы.
var input = document.querySelector('input[name=todoItem]'),
btnAdd = document.querySelector('button[name=add]'),
btnClear = document.querySelector('button[name=clear]'),
btnSave = document.querySelector('button[name=save]'),
list = document.querySelector('.todo'),
storeList = [];
list.innerHTML = window.localStorage.getItem('list');
function renderTodos(){
//Cached array length for use in for loop
var listLength = storeList.length,
//Created list item and button
el = document.createElement('li'),
x = document.createElement('button');
//Set text for remove button
x.setAttribute('class', 'remove');
x.innerHTML = '<i class="fa fa-trash-o fa-2x"></i>';
//Loop for adding items to array and appending items to list
for(var i = 0; i < listLength; i++){
el.innerHTML = storeList[i];
list.appendChild(el);
el.appendChild(x);
}
//Clear out and put focus back in input box
input.value = '';
input.focus();
}
//Add todo item to list
function addTodos(e){
//Check to see that input isn't empty or only spaces with no characters
// and add todo item if add button is clicked or enter key is pushed
if(input.value.trim() !== '' && (e.which ===13 || e.which ===1)){
storeList.push(input.value);
renderTodos();
}
else if(input.value.trim() === '' && (e.which ===1 || e.which === 13)){
alert('Please Enter A Valid Item!');
input.focus();
}
}
function removeItem(e){
var node = e.target;
var attr = node.getAttribute('class');
if(attr === 'remove'){
node = node.parentNode;
node.parentNode.removeChild(node);
}
}
//Clear the whole list
function clearList(){
// make list empty
list.innerHTML = '';
storeList.splice(0, storeList.length);
renderTodos();
}
//Initialize listeners and show saved list from local storage on page load
function init(){
btnSave.addEventListener('click', function(){
window.localStorage.setItem('list', list.innerHTML);
});
list.addEventListener('click', removeItem);
btnAdd.addEventListener('click', addTodos);
btnClear.addEventListener('click', clearList);
input.addEventListener('keydown', addTodos);
}
window.onload = init;
Все работает, кроме кнопок со значком корзины, которые работают только при нажатии, а затем при нажатии клавиши ввода.
1 ответ
По какой-то причине Firefox делал цель клика <i>
тег в то время как цель клика Chrome и Safari была <button>
тег. Я сделал исправление с условием для каждой цели на основе несоответствия браузера.
<button><i></i></button>