Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   События формы (https://javascript.ru/forum/dom-window/70175-sobytiya-formy.html)

Роман Андреевич 17.08.2017 05:45

События формы
 
Коллеги доброго времени суток, проблема следующая:

На странице есть 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 секунды, а потом выводится в консоль его число. Примерно так.

Роман Андреевич 17.08.2017 06:26

e - событие
target - записали в переменную

можно без этих строк, суть не в них

Роман Андреевич 17.08.2017 06:28

Вопрос, в том, как выводить в консоль, только одно число а не каждое, которое ввел пользователь. Т.к. input (событие) срабатывает при каждом изменении поля input, нужно взять только последнее число, через 2 секунды после

j0hnik 17.08.2017 06:34

заменить событие например на
el.addEventListener('blur', function(e) { // потеря фокуса инпутом

Роман Андреевич 17.08.2017 06:42

Rise, а в чем бред то??????? с точки зрения кроссбраузерности и делегирования в чем проблема то, везде работает!!!!!

Есть проблема и я задал вопрос, если не поняли вопроса так и скажите...

j0hnik 17.08.2017 06:43

Цитата:

Сообщение от Rise (Сообщение 461816)
j0hnik,
Товарищ, событие blur не вплывает так что же ты его на document повесил?

document.addEventListener('focusout', function(e) { // потеря фокуса инпутом

Роман Андреевич 17.08.2017 06:43

А говорить про бред это детский сад, форум для того и создан, одни просят помощи, а другие если могут помогают, по мойму все нормально

laimas 17.08.2017 06:46

Цитата:

Сообщение от Роман Андреевич
по мойму все нормально

Не нормально, тем более что "На странице есть input", то есть один, делегировать при этом его обработчики, это уже глупо.

Роман Андреевич 17.08.2017 06:48

j0hnik, в целом работает, но работает когда мышкой кликаешь в другое место, суть та же если рядом поставить кнопку.

А нужно что бы пользователь ввел какое то число, прошло 2 секунды а это число вывелось в консоль ну или в блок, какой нибудь, автоматом.

j0hnik 17.08.2017 06:48

Цитата:

Сообщение от Rise (Сообщение 461820)
Роман Андреевич,
в ie8 не работает
j0hnik,
в FF не работает focusout

тогда blur на сам input


Часовой пояс GMT +3, время: 03:50.