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

Rise 17.08.2017 06:24

Цитата:

Сообщение от Роман Андреевич
С тем что происходит внутри события все понятно, надеюсь

Не понятны строки 3 и 4, и наличие цикла, что они делают?

Роман Андреевич 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) { // потеря фокуса инпутом

Rise 17.08.2017 06:37

Роман Андреевич,
Суть в том что весь код неверен, и с точки зрения кроссбраузерности, и с точки зрения делегирования, почитайте Основы работы с событиями и не пишите больше такой бред.

Rise 17.08.2017 06:39

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

Роман Андреевич 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

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

Rise 17.08.2017 06:46

Роман Андреевич,
в ie8 не работает
j0hnik,
в FF не работает focusout

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

Rise 17.08.2017 06:50

Цитата:

Сообщение от Роман Андреевич
про бред это детский сад

Детский сад это писать делегирование инпутам, которые не могут быть вложены друг в друга.

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

laimas, инпут не один. есть список элементов, внутри каждого есть инпут. Необходимо определить какой элемент мы затронули.

Что глупого то??????

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

Rise, сайт работает от ie10+

laimas 17.08.2017 06:55

Цитата:

Сообщение от Роман Андреевич
Что глупого то??????

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

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

laimas,
А что не понятного то в моем вопросе?????? При чем тут делегирование и кроссбраузерность?????????

Я задал вопрос, как из поля вытащить value и вывести его в консоль, не каждый раз а через какое то время, при этом число должно быть последним, которое ввел пользователь....

Извиняюсь если задал изначально вопрос некорректно)))))))))

Rise 17.08.2017 06:59

Цитата:

Сообщение от Роман Андреевич
сайт работает от ie10+

строки 3-4 недопопытки под ie8 сделать

Роман Андреевич 17.08.2017 07:01

Rise,
да без разницы на кроссбраузерность!!!

Rise 17.08.2017 07:02

Роман Андреевич,
дело в твоем бредовом коде, я такого еще не встречал если честно) ты даже скопипастил криво или откуда ты это взял... видно совсем валенок... читай ссылку что я дал развивайся... не смеши народ...

laimas 17.08.2017 07:02

Цитата:

Сообщение от Роман Андреевич
При чем тут делегирование и кроссбраузерность?

Вам это и пытаются пояснить, но до вас это не доходит.

Роман Андреевич 17.08.2017 07:02

Суть в том, что пользователь ввел какое то число, а через какое то время, если он закончил ввод вывести в консоль это число!!!!!!!!!

Вопрос как это сделать

Роман Андреевич 17.08.2017 07:03

laimas, покажите как это сделать....

Роман Андреевич 17.08.2017 07:04

Rise, что в нем бредового???????

Rise 17.08.2017 07:06

Цитата:

Сообщение от j0hnik
тогда blur на сам input

:yes:

Rise 17.08.2017 07:10

Цитата:

Сообщение от Роман Андреевич
что в нем бредового???????

это ты сам должен установить после прочтения, иначе развитие не произойдет

Роман Андреевич 17.08.2017 07:10

ясно

Роман Андреевич 17.08.2017 07:10

Видимо разное развитие

laimas 17.08.2017 07:12

Цитата:

Сообщение от Роман Андреевич
laimas, покажите как это сделать....

Много разговоров по данному вопросу потому, что вы вопрос "размазали". Хоть 100 полей ввода, это еще не означает, что требуется делегирование. Делегируют тогда, когда, например, поля добавляются в документ динамически, в этом случае обработку делегируют их ближайшему общему родителю.

Если ваши поля присутствуют на странице, то установите обработчики прямо на них, и вам поможет onblur, который не всплывает, а поэтому не подходит под делегирование.

Роман Андреевич 17.08.2017 07:23

laimas, blur срабатывает только при потере фокуса, а нужно что бы автоматом выводились символы в консоль, без дополнительных действий

Роман Андреевич 17.08.2017 07:25

Ладно, все равно спасибо, разберусь

laimas 17.08.2017 07:28

Цитата:

Сообщение от Роман Андреевич
blur срабатывает только при потере фокуса, а нужно что бы автоматом выводились символы в консоль

А что в случае если blur, то в консоли их китайцы прописывать будут?

Можно и таймер, но при фокусе если таймер запущен уже (другим полем), то очищать его, а по отпусканию кнопки запускать новый.

Роман Андреевич 17.08.2017 07:32

laimas, в том и дело, что нет кнопки, с кнопкой то все просто, тык и работает, это сделано. Нужно не фокус искать, а отслеживать изменение input'а

Rise 17.08.2017 07:36

Роман Андреевич,
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);
			}
		}
	}
};

laimas 17.08.2017 07:39

Цитата:

Сообщение от Роман Андреевич
Нужно не фокус искать, а отслеживать изменение input'а

Даже так? А что есть "изменение поля ввода"? Пожалуйста - обрабатывайте событие onchange поля ввода. Но, это событие сработает только тогда, когда поле потеряет фокус.

Что же нужно обрабатывать, что знать, что значение поля изменилось?

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

Rise, спасибо, )))))))))) пока баталии развивались, я то же самое сделал. Проблема оказалась в очистке таймера.

Роман Андреевич 17.08.2017 07:53

laimas,
Изменение: change, input, cut, copy, paste - https://learn.javascript.ru/events-change

Rise 17.08.2017 07:54

Цитата:

Сообщение от Роман Андреевич
я то же самое сделал

в первом посте все твои поделки


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