Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 03.01.2014
Сообщений: 26

Делегировать событие 'focus' с document на input

23.01.2017, 21:49. Показов 2275. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Подскажите как можно делегировать событие 'focus' с document на input (vanilla js).
С 'click' работает, а с 'focus' и 'blur' нет, так как на document нет таких событий.
Спасибо.

JavaScript
1
2
3
4
5
document.addEventListener('focus', function(e) {
  if(e.target.nodeName == 'INPUT') {
    console.log(e.target);
  }
});
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.01.2017, 21:49
Ответы с готовыми решениями:

Вычислить площадь треугольника, используя событие Focus
Здравствуйте! Помогите написать сценарий. Вот задачач: "На плоскости заданы координаты трех точек. Напишите сценарий, который вычисляет...

Вычислить площадь треугольника, используя событие Focus
Как вычислить площадь треугольника, используя событие Focus и Select? Один вопрос - одна отдельная тема!

Как сделать вывод результата используя событие Focus?
Здравствуйте форумчане. Задали задачу: Напишите сценарий, который вычисляет площадь треугольника (Использовать событие Focus), если на...

4
54 / 58 / 39
Регистрация: 27.12.2011
Сообщений: 93
24.01.2017, 02:42
Почему не прицепить событие 'focus' напрямую к input?

Или вас смущает, что инпутов будет много и нужно каждому цеплять событие?

JavaScript
1
2
3
4
5
6
7
var inputsList = document.querySelectorAll('.input-with-listener');
var inputsArray = Array.prototype.slice.call(inputsList);
inputsArray.forEach(function(input) {
    input.addEventListener('focus', function(e) {
        console.log(e.target);
    }
});
Это если надо прикрутить к определённой группе инпутов, если вообще ко всем:
-//- document.querySelectorAll('input');
-//-

Добавлено через 2 минуты
При этом отпадает надобность в проверке
e.target.nodeName == 'INPUT'
т.к. вы будете точно знать, что выбрали инпуты и ничего кроме них.
0
0 / 0 / 0
Регистрация: 03.01.2014
Сообщений: 26
24.01.2017, 08:38  [ТС]
Mikola-BLR, Да, но так не работает если input нет сразу на странице, при инициализации js кода. Как поступить, если input добавляется на страницу позже, например с получением ajax???
вот код, который вы дали, но он не работает, если input добавляется в DOM после загрузки страницы, например по клику на кнопку.
HTML5
1
2
3
4
<body>
  <button>click</button>
  <div class="wrapper"></div>
</body>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let btn = document.querySelector('button'),
    wrapper = document.querySelector('.wrapper');
btn.addEventListener('click', function() {
  let input = document.createElement('input');
  input.setAttribute('type', 'text');
  wrapper.appendChild(input);;
});
 
// ваш код
let inputsList = document.querySelectorAll('input');
let inputsArray = Array.prototype.slice.call(inputsList);
inputsArray.forEach(function(input) {
    input.addEventListener('focus', function(e) {
        console.log(e.target);
    })
});
0
54 / 58 / 39
Регистрация: 27.12.2011
Сообщений: 93
24.01.2017, 09:56
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// если есть какие-то инпуты при загрузке страницы,
// если их нет, а все добавляются динамически, то можно опустить
let inputsList = document.querySelectorAll('input');
let inputsArray = Array.prototype.slice.call(inputsList);
inputsArray.forEach(function(input) {
    input.addEventListener('focus', function(e) {
        someAction(e);
    })
});
 
// тут какие-то действия для инпута
function someAction(e) {
    console.log(e.target);
}
 
// добавим в исходный код навешивание слушателя
let btn = document.querySelector('button'),
    wrapper = document.querySelector('.wrapper');
btn.addEventListener('click', function() {
    let input = document.createElement('input');
    input.setAttribute('type', 'text');
    wrapper.appendChild(input);
 
    //вот здесь, сразу после помещения элемента в DOM он уже доступен
    input.addEventListener('focus', function(e) {
        someAction(e);
    })
});
1
0 / 0 / 0
Регистрация: 03.01.2014
Сообщений: 26
24.01.2017, 10:55  [ТС]
Mikola-BLR, Да так работает, спасибо, но все рано код выглядит не очень гибко.
В данном примере я сам создаю input и он у меня в переменной, но что если он будет передаваться куском html с сервера?
Можно после вставки делать выборку внутри того элемента, куда мы вставляем новый html и после этого вешать события. Но это как-то не очень выглядит. Есть ли еще варианты или только так???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2017, 10:55
Помогаю со студенческими работами здесь

Событие onMouseOver внутри document.write
Доброго времени суток!!! Как сделать, чтобы ЯваСкрипт выводил тег (например div) с событием onMouseOver, и чтобы при наведении в...

Заставить корректно выводить сообщение в зависимости от введенного числа. Input и document.getElementById
Здравствуйте! Есть несколько полей ввода, где пользователь должен вводить число и если оно больше 10, то выводиться сообщение о том,...

Focus на поле input при открытии popup window (bootstrap popover)
Есть кнопка на сайте, при нажатии открывается popover окошко, с полем input в котором есть текст. Как сделать так чтобы при открытии...

Событие на document
Здравствуйте. Имеется некий класс с несколькими методами. + Довольно стандартные строки навешивания события на элемент. Код JS. ...

Не работает событие focus() (я 1000 раз напишу на доске разницу JS и Java)
Помогите разобраться. Не заменяется картинка по событию focus() $(document).ready(function () { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru