Как узнать, какой элемент вызвал функцию?

106
15 апреля 2021, 08:50

К примеру есть два элемента <input type="range">, которые вызывают одну и туже функцию (с помощью oninput=""). В зависимости от того, какой именно input вызвал функцию, будет выполняться определенный код. Подскажите, как узнать какой именно input вызвал функцию (и не обязательно input, просто взял как пример). Может есть какие то методы или что то подобное?

Answer 1

Варианта 2:

  1. Навешивать слушатели через addEventListner, тогда внутри слушателя this будет указывать на элемент, к которому привязан слушатель.

Так же в этом режиме слушателю передается аргумент "контекст события", у которого есть поле target, указывающий на элемент, который инициировал событие.

btn1.addEventListener('click', handler) 
btn2.addEventListener('click', handler) 
 
function handler(e) { 
 console.log("this =", this) 
 console.log("e.target =", e.target) 
}
<button id="btn1">btn 1</button> 
<button id="btn2">btn 2</button>

  1. Явно привязывать this:

function handler() { 
 console.log("this =", this) 
}
<button onclick="handler.apply(this)">btn 1</button> 
<button onclick="handler.apply(this)">btn 2</button>

Answer 2

можно передавать параметр в функцию обработки события

function someFunction(id, value) { 
  console.log(id, value); 
}
<input type="range" oninput="someFunction(1, this.value)" /> 
<input type="range" oninput="someFunction(2, this.value)" />

READ ALSO
Как отправить Post запрос на js без библиотек?

Как отправить Post запрос на js без библиотек?

Я хочу отправить сообщение от сообщества вкКак составить на js пост запрос аналогичный ссылке

109
Умный указатель сигнал-слот

Умный указатель сигнал-слот

Попробовал передать умный указатель std::unique_ptr через сигнал/слот и получил ошибку из за удаленного конструктора копирования (unique_ptr(const unique_ptr&)...

64
Проблема с c++ getline() в gcc

Проблема с c++ getline() в gcc

Потребовалось написать пару простеньких скриптов на c++До этого когда-то писал в Visual Studio, сейчас сижу на linux(fedora 29), поэтому перешёл на gcc

79