@Kim_Soal

Js, почему такое поведение?

работает:
var inp1 = document.createElement("input");
	var inp2 = document.createElement("input");

	calculate(inp1, inp2);

	div.appendChild(inp1);
	div.appendChild(inp2);
	
	function calculate(test1, test2){
		test1.oninput = function(){
			console.log(this.value);
		}
		test2.oninput = function(){
			console.log(this.value);
		}
	}


не работает:
var inp1 = document.createElement("input");
	var inp2 = document.createElement("input");

	calculate(inp1, inp2);

	div.appendChild(inp1);
	div.innerHTML +="qwe";
	div.appendChild(inp2);
	div.innerHTML +="qwe";



	function calculate(test1, test2){
		test1.oninput = function(){
			console.log(this.value);
		}
		test2.oninput = function(){
			console.log(this.value);
		}
	}


Стало интересно почему.
Вероятно, это очевидно сразу для кого-то.
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
div.innerHTML +="qwe"

Вас вводит в заблуждение оператор += - вам кажется, будто бы к содержимому div что-то там добавляется. Это не совсем так - содержимое div полностью перезаписывается. Соответственно, ранее добавленные элементы будут удалены и заменены новыми. А к новым элементам никаких обработчиков вы не привязываете - отсюда и отсутствие вывода в консоль.

Если хотите, чтобы добавление текста не приводило к перезаписыванию содержимого элемента, выполняйте его с помощью методов insertAdjacentText или append.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы