@IvanIvanOvcharenko

Значение this при событии input?

Добрый день! Есть вопрос касательно значение this , при навешивании обработчика событий на элементы. Если я вешаю событие click на какой либо элемент и вывожу значение this в консоли - выводится элемент по которому был клик.
let div = document.querySelector('div');
        div.addEventListener('click', () => {
            console.log(this)
        })


Если я вешаю событие input , на элементы input - значение this это глобальный объект window.
let inputs = document.querySelectorAll('.step input');
        inputs.forEach(element => {
            element.addEventListener('input', () => {
                console.log(this)
            })
        })


Столкнулся с данной проблемой, при решении одной задачи. На лендинге есть несколько одинаковых форм, нужно что бы при заполнении инпута на одной форме, заполнялись аналогичные инпуты на остальных формах. Задачу выполнил, хотя изначально думал что буду получать значение input через this.value
  • Вопрос задан
  • 195 просмотров
Решения вопроса 1
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
https://habr.com/ru/company/ruvds/blog/419371/
https://developer.mozilla.org/ru/docs/Web/JavaScri...
https://tproger.ru/translations/javascript-this-ke...
https://yandex.ru/search/?text=this%20в%20javascript

Вы лучше проясните эту тему для себя что называется от и до. Один из важнейших аспектов языка. Знать и понимать надо.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vachunya
@vachunya
Бог верстки, JS maniac, React bomberman
Я вообще не понимаю что за бред Вы написали и какую цель преследуете, во первых почему не юзаете JQuery?
В чем принципиально писать на чистом JS?
Во-вторых напишите ясно чего вы хотите от инпутов?
И наконец в третьих, стрелочные функции не имеют своего контекста, если стрелочная функция не вызвана как метод определенного объекта, то контекстом для стрелочной функции будет window.
чтобы ваша программа заработала нужно убрать стрелочные функции, по моему Вы не понимаете что делаете в принципе и лепите все подряд не зная языка, пользуйтесь JQuery, и учите JS)))))

<div></div>
	<div class="step"><input type="text" class="input_1"></div>
	<div></div>
	<div class="step"><input type="text" class="input_2"></div>
	<div></div>
 	<div class="step"><input type="text" class="input_3"></div>
 	<style>
 		div {
 			width: 100px;
  			height: 50px;
  			background-color: purple;
  			margin: 5px;
 		}
  
		.step {
			background-color: green;
  			margin: 15px 5px;
  			display: flex;
		}
 	</style>
 	<script type="text/javascript">
 		document.querySelector('div').addEventListener('click', function() {
            console.log(this)
        })
 		function setInputsValue(inputs, value) {
 			inputs.forEach(input => {
            	input.value = value;
            })
 		}

		let inputs = document.querySelectorAll('.step input');
        inputs.forEach(input => {
            input.addEventListener('input', function() {
                console.log(this)
                setInputsValue(inputs, this.value)
            })
        })
 	</script>


Если при изменении одного инпута менять остальные, то примерно так без JQuery делается
Ответ написан
Ваш ответ на вопрос

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

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