Jump to content
  • 0

Узнать, где focus()


DjTarik
 Share

Question

Проблема такая:

Имеется форма с кучей полей (input, к примеру). Допустим, в некоторые поля в любом порядке вносится информация. После нажатия на кнопку "Отправить" - нужно знать, какой из инпутов последним был в фокусе?

Обыскал инет - ничего путного нету.

Пробовал так:

Всем полям - по 2-а события: onfocus() и onblur(). На onfocus() - заносим в переменную например id элемента. При выходе из фокуса - убираем. Проблема в том, что при нажатии на кнопку - фокус на инпуте тоже теряется.

Не знаю, что делать...

Link to comment
Share on other sites

15 answers to this question

Recommended Posts

  • 0
А что если изначально всем импутам раздать по свойству со значением итерации цикла. Далее так же запоминать последнюю ноду по её свойству.

Не понял тебя. Как мне потом узнать, где в последний раз был "фокус"?

Повесить всем инпутам событие onfocus, которое будет записывать в какую-то переменную ссылку на эту ноду.

Хотя, опять же, нафига этот цирк?

Так и делал - тогда если я через некоторое время на той же странице опять нажму на "Отправить" (ничего не вводя в инпуты) - я получу фокус последнего элемента, хотя он и не был выбран.

Поэтому юзал onfocus() и onblur().

А задача такая: при отправке формы аяксом проверять именно то поле, на котором был фокус, а не всё форму.

Link to comment
Share on other sites

  • 0
Так и делал - тогда если я через некоторое время на той же странице опять нажму на "Отправить" (ничего не вводя в инпуты) - я получу фокус последнего элемента, хотя он и не был выбран.

Можно после клика по кнопке обнулить переменную.

UPD: Даже не после клика а посте отработки аякса - когда наступает readyState == 4

Link to comment
Share on other sites

  • 0
Так и делал - тогда если я через некоторое время на той же странице опять нажму на "Отправить" (ничего не вводя в инпуты) - я получу фокус последнего элемента, хотя он и не был выбран.

Какое-то извращенное юзабилити

А задача такая: при отправке формы аяксом проверять именно то поле, на котором был фокус, а не всё форму.

Проверка происходит на сервере? или джсом локально?

Если локально - то делай проверку не при отправке а при onblur

Всем полям - по 2-а события: onfocus() и onblur(). На onfocus() - заносим в переменную например id элемента. При выходе из фокуса - убираем. Проблема в том, что при нажатии на кнопку - фокус на инпуте тоже теряется.

Не знаю, что делать...

Так зачем стирать ее при потере фокуса? Пусть будет себе. При фокусе перезаписывай и все.

Edited by mishka2
Link to comment
Share on other sites

  • 0
Можно после клика по кнопке обнулить переменную.

UPD: Даже не после клика а посте отработки аякса - когда наступает readyState == 4

Тогда нужно обнулять и всё остальное - т.е. клик на тексте, и в любом другом месте...

Странная задача...

=) Есть такое дело. Я уже пол инета облазил - так что плюсы тоже есть)

Какое-то извращенное юзабилити

Проверка происходит на сервере? или джсом локально?

Если локально - то делай проверку не при отправке а при onblur

Так зачем стирать ее при потере фокуса? Пусть будет себе. При фокусе перезаписывай и все.

1. Такая задача)

2. Проверка происходит на сервере.

3. Тогда возникает проблема, связанная с пунктом 1.

Неужели нету какого-нить стандартного метода получения такого рода информации?

Может можно как-нить отменить последние onblur() ? если потом происходит щелчок по кнопке?

Edited by DjTarik
Link to comment
Share on other sites

  • 0

данные формы отправляешь аяксом?

jQuery юзаешь?

заганяешь в меременную инпут при фокусе. При онблуре не затираешь.

отправил данные, после получил ответ. И исходя от ответа - если все ок, то выводишь ромашку юзеру, типа молодец, справился, и ту переменную можна затереть. Если не все ок, то даешь инпуту из той переменной фокус.

както так

Link to comment
Share on other sites

  • 0
данные формы отправляешь аяксом?

jQuery юзаешь?

заганяешь в меременную инпут при фокусе. При онблуре не затираешь.

отправил данные, после получил ответ. И исходя от ответа - если все ок, то выводишь ромашку юзеру, типа молодец, справился, и ту переменную можна затереть. Если не все ок, то даешь инпуту из той переменной фокус.

както так

Отправляю аяксом. Пишу на чистом JS, без фреймворков.

Ну что-то типо этого и оставил: затирать буду по нажатию на кнопку.

Но сам факт, что нельзя узнать, какой инпут был в фокусе последним меня не радует)

Link to comment
Share on other sites

  • 0
Но сам факт, что нельзя узнать, какой инпут был в фокусе последним меня не радует)

Вы изобретаете извращенный велосипед, которому требуются квадратные колеса. Никто еще до вас не требовал узнать, какой элемент получал фокус последним, потому что для этого есть onblur.

Алгоритм моментальной проверки правильности введенного значения делается по onblur. Извращенный вариант - делать еще дополнительно проверку на onclick и onchange.

Link to comment
Share on other sites

  • 0
Ну что-то типо этого и оставил: затирать буду по нажатию на кнопку.

Вся проблема в этом.

Затирай не по нажатию, а только в зависимости от того что придет в ответе.

Link to comment
Share on other sites

  • 0
Вы изобретаете извращенный велосипед, которому требуются квадратные колеса. Никто еще до вас не требовал узнать, какой элемент получал фокус последним, потому что для этого есть onblur.

Алгоритм моментальной проверки правильности введенного значения делается по onblur. Извращенный вариант - делать еще дополнительно проверку на onclick и onchange.

Вся проблема в этом.

Затирай не по нажатию, а только в зависимости от того что придет в ответе.

Задача была такая (подробно):

Есть текст (на иностранном языке), в нём некотоых слов не хватает, а на их месте - текстовые поля. Пользователь может заполнить поля - и, нажав на кнопку, проверить, правильно ли он их ввёл. С этим проблем нету)

Вторая кнопка - "Подсказка". Работает так: я не знаю слова - жму на "подсказку". Нужно отловить, на каком поле был ввод (чтобы знать, подсказку к какому слову выводить), и только после нажатия на кнопку (НЕ само по себе и НЕ мгновенно) выполнить запрос. Каждое нажатие на кнопке выводит одну букву слова в поле, на котором был инпут)

Вот такой "модный" скрипт)

Link to comment
Share on other sites

  • 0

что-то мне подсказывает что если ты четко сформулируешь задачу, что когда как и при каких условиях должно происходить - сразу напишешь то что нужно.

Я понял эту задачу так:

При клике на кнопку "Отправить" нужно проверить заполнены ли поля. Если какие-то поля не заполнены то их как-то выделить и соответственно ничего никуда не отсылать. Если все поля заполнены то только отсылаем данные и больше никакого ф-ционала.

Ограничить область выборки нужных инпутов(чтобы на всех не ловить фокус) и при фокусе заганять инпут в переменную.

При нажатии на кнопку "Подсказка" - добавить буковку в тот инпут который хранится в переменной.

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

Link to comment
Share on other sites

  • 0
что-то мне подсказывает что если ты четко сформулируешь задачу, что когда как и при каких условиях должно происходить - сразу напишешь то что нужно.

Я понял эту задачу так:

При клике на кнопку "Отправить" нужно проверить заполнены ли поля. Если какие-то поля не заполнены то их как-то выделить и соответственно ничего никуда не отсылать. Если все поля заполнены то только отсылаем данные и больше никакого ф-ционала.

Ограничить область выборки нужных инпутов(чтобы на всех не ловить фокус) и при фокусе заганять инпут в переменную.

При нажатии на кнопку "Подсказка" - добавить буковку в тот инпут который хранится в переменной.

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

Эмм... =) Не совсем)

Забудь про кнопку "Отправить". Там проблем нету.

Есть кнопка "Подсказка".

Работает так:

Я лошара, не знаю английского языка. Кликаю в поле, где нужно ввести верное слово. Думаю пару минут. Т.к. я лошара и ничего не знаю - я жму кнопку "Подсказка". Идёт запрос на сервак и я получаю в ответ первую букву слова.

Как мне выбрать именно тот инпут, на который я кликнул? Вот в чём загвоздка.

onblur() сработает сразу, я подсказку я могу захотеть получить и потом, когда уже написал слово, вернулся переписать и т.д. Поэтому "Подсказка" и сделана отдельной кнопкой.

(есть сайт с похожим функционалом (вернее таким же, но без решения моей проблемы) если найду - покажу завтра)

Link to comment
Share on other sites

  • 0
Я лошара, не знаю английского языка. Кликаю в поле, где нужно ввести верное слово. Думаю пару минут. Т.к. я лошара и ничего не знаю - я жму кнопку "Подсказка". Идёт запрос на сервак и я получаю в ответ первую букву слова.

Хых. У тебя пять форм. Две заполнил, потом решил заполнить последнюю. В какую форму нужно давать подсказку, в последнюю или третью. Логически - в третью, со стремной логикой - в последнюю.

Дабы была 100% определенность, при нажатии на кнопарь "подсказка", нужно показывать возле пустых форм дополнительную кнопочку, типа вот сюда хочу подсказку. Это самый адекватный метод, иначе все остальное имеет весьма сомнительную и слабопредсказуемую логику.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy