События формы
Коллеги доброго времени суток, проблема следующая:
На странице есть input в который пользователь вводит число, какое нибудь не важно. Далее скрипт на сервер отправляет данные. Теперь собственно вопрос: я ловлю событие input'а : document.addEventListener('input', function(e) { e = e || window.e; var target = e.target || window.target; while (target != this) { if (target.tagName != 'INPUT') return; if (target.hasAttribute('data-action')) { if (target.getAttribute('data-action') == 'refresh') { console.log(target.value); } else return; } else return; target = target.parentNode; } С тем что происходит внутри события все понятно, надеюсь. НО!!! как сделать, что бы в консоле выводилось не каждое value, которое выводит пользователь а последнее. Т.е. я ввожу например 50, сначала в консоле выводится 5 а потом 50, а как сделать что бы выводило сразу 50. Выводить число нужно с задержкой, т.е. пользователь что то ввел, ему дается 2 секунды, а потом выводится в консоль его число. Примерно так. |
Цитата:
|
e - событие
target - записали в переменную можно без этих строк, суть не в них |
Вопрос, в том, как выводить в консоль, только одно число а не каждое, которое ввел пользователь. Т.к. input (событие) срабатывает при каждом изменении поля input, нужно взять только последнее число, через 2 секунды после
|
заменить событие например на
el.addEventListener('blur', function(e) { // потеря фокуса инпутом |
Роман Андреевич,
Суть в том что весь код неверен, и с точки зрения кроссбраузерности, и с точки зрения делегирования, почитайте Основы работы с событиями и не пишите больше такой бред. |
j0hnik,
Товарищ, событие blur не всплывает так что же ты его на document повесил? |
Rise, а в чем бред то??????? с точки зрения кроссбраузерности и делегирования в чем проблема то, везде работает!!!!!
Есть проблема и я задал вопрос, если не поняли вопроса так и скажите... |
Цитата:
document.addEventListener('focusout', function(e) { // потеря фокуса инпутом |
А говорить про бред это детский сад, форум для того и создан, одни просят помощи, а другие если могут помогают, по мойму все нормально
|
Роман Андреевич,
в ie8 не работает j0hnik, в FF не работает focusout |
Цитата:
|
j0hnik, в целом работает, но работает когда мышкой кликаешь в другое место, суть та же если рядом поставить кнопку.
А нужно что бы пользователь ввел какое то число, прошло 2 секунды а это число вывелось в консоль ну или в блок, какой нибудь, автоматом. |
Цитата:
|
Цитата:
|
laimas, инпут не один. есть список элементов, внутри каждого есть инпут. Необходимо определить какой элемент мы затронули.
Что глупого то?????? |
Rise, сайт работает от ie10+
|
Цитата:
|
laimas,
А что не понятного то в моем вопросе?????? При чем тут делегирование и кроссбраузерность????????? Я задал вопрос, как из поля вытащить value и вывести его в консоль, не каждый раз а через какое то время, при этом число должно быть последним, которое ввел пользователь.... Извиняюсь если задал изначально вопрос некорректно))))))))) |
Цитата:
|
Rise,
да без разницы на кроссбраузерность!!! |
Роман Андреевич,
дело в твоем бредовом коде, я такого еще не встречал если честно) ты даже скопипастил криво или откуда ты это взял... видно совсем валенок... читай ссылку что я дал развивайся... не смеши народ... |
Цитата:
|
Суть в том, что пользователь ввел какое то число, а через какое то время, если он закончил ввод вывести в консоль это число!!!!!!!!!
Вопрос как это сделать |
laimas, покажите как это сделать....
|
Rise, что в нем бредового???????
|
Цитата:
|
Цитата:
|
ясно
|
Видимо разное развитие
|
Цитата:
Если ваши поля присутствуют на странице, то установите обработчики прямо на них, и вам поможет onblur, который не всплывает, а поэтому не подходит под делегирование. |
laimas, blur срабатывает только при потере фокуса, а нужно что бы автоматом выводились символы в консоль, без дополнительных действий
|
Ладно, все равно спасибо, разберусь
|
Цитата:
Можно и таймер, но при фокусе если таймер запущен уже (другим полем), то очищать его, а по отпусканию кнопки запускать новый. |
laimas, в том и дело, что нет кнопки, с кнопкой то все просто, тык и работает, это сделано. Нужно не фокус искать, а отслеживать изменение input'а
|
Роман Андреевич,
document.addEventListener('input', function (e) { var target = e.target; clearTimeout(target.timeoutId); if (target.tagName == 'INPUT') { if (target.hasAttribute('data-action') { if (target.getAttribute('data-action') == 'refresh') { target.timeoutId = setTimeout(function () { console.log(target.value); }, 2000); } } } }; |
Цитата:
Что же нужно обрабатывать, что знать, что значение поля изменилось? |
Rise, спасибо, )))))))))) пока баталии развивались, я то же самое сделал. Проблема оказалась в очистке таймера.
|
laimas,
Изменение: change, input, cut, copy, paste - https://learn.javascript.ru/events-change |
Цитата:
|
Часовой пояс GMT +3, время: 11:38. |