Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 1 год назад.
Все работает, но в консоли у меня ошибка.
Uncaught TypeError: Cannot read property 'replaceChild' of null
methodName();
function methodName() {
let alldivs = document.querySelectorAll('.myBtn');
let alldivsArr = Array.from(alldivs);
for (var i = alldivsArr.length - 1; i >= 0; i--) {
alldivsArr[i].addEventListener('click', function asd() {
console.log(i);
var d = document.createElement('input');
d.setAttribute("class", "myInput");
d.setAttribute("value", this.innerText);
this.parentNode.replaceChild(d, this);
d.select();
d.addEventListener('blur', function() {
let g = document.createElement('div');
g.setAttribute("class", "myBtn");
g.innerHTML = d.value;
d.parentNode.replaceChild(g, d);
// removeIventLis();
methodName();
})
});
}
}
<div class="myBtn">lolk</div>
<div class="myBtn">lolkasdasd</div>
<button id="btn">Click</button>
Проблема заключается в вызове methodName
, внутри обработчика blur
.
Так как внутри этого метода добавляются обработчики всем выбранным элементам на странице, а не только что добавленным, у некоторых элементов оказывается сразу несколько обработчиков клика. Поэтому при клике на них, на втором обработчике у this
уже нет parentNode
так как элемент уже был заменен на input.
Для решения достаточно вручную добавить обработчик вновь создаваемому элементу.
methodName();
function methodName() {
let alldivs = document.querySelectorAll('.myBtn');
let alldivsArr = Array.from(alldivs);
for (var i = alldivsArr.length - 1; i >= 0; i--) {
alldivsArr[i].addEventListener('click', function myBtnClickHandler() {
console.log(i);
var d = document.createElement('input');
d.setAttribute("class", "myInput");
d.setAttribute("value", this.innerText);
this.parentNode.replaceChild(d, this);
d.select();
d.addEventListener('blur', function() {
let g = document.createElement('div');
g.setAttribute("class", "myBtn");
g.innerHTML = this.value;
g.addEventListener('click', myBtnClickHandler);
this.parentNode.replaceChild(g, this);
})
});
}
}
<div class="myBtn">lolk</div>
<div class="myBtn">lolkasdasd</div>
<button id="btn">Click</button>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Задача - добавление в начале строк картинок, соответствующих названию игры, если подходящей картинки нет, то должна вставляться картинка...
Если несколько input, рядом с ними сообщения об ошибке, у которых дефолтно display: none