Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужно определить в каком инпуте был фокус(мигал ку 
:(
    Опции темы
BlackApricot
Дата 14.5.2010, 05:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.8.2009

Репутация: нет
Всего: нет



Нужно определить в каком инпуте был фокус(мигал курсор), чтобы потом вернуть его на место.
Использование библиотек не желательно. 
Но и не откажусь, если будет конкретно написано, как к ней обратиться, и что она вернёт. То есть реальный рабочий код, учитывая нулевые знания библиотек.
PM MAIL   Вверх
Amphiluke
Дата 14.5.2010, 08:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Проще всего навязать всем нужным input'ам обработчик события onfocus, в который будет запоминать текущий элемент в фокусе.
Код

    <form action="#" id="aForm">
        <input type="text" /><br />
        <input type="text" /><br />
        <input type="text" /><br />
        <input type="text" /><br />
        <input type="text" /><br />
        <input type="button" value="return focus to the last focused input" onclick="focusedInput.focus();" />
    </form>
    <script type="text/javascript">
        var inputs = document.getElementById("aForm").getElementsByTagName("input");
        var focusedInput = inputs[0];
        for (var i = 0; i < inputs.length; i++) {
            if (inputs[i].type.toLowerCase() == "text")
                inputs[i].onfocus = function() {focusedInput = this;}
        }
    </script>

PM   Вверх
BlackApricot
Дата 16.5.2010, 05:25 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.8.2009

Репутация: нет
Всего: нет



Amphiluke, спасибо, но как видишь, всё ещё проще.


Делаем глобальную переменную:
Код

var lastInput=null;

В нужных инпутах пишем:
Код

 ...onfocus(lastInput=this;)...

В нужных местах проверяем, и если нужно(или можно?), ставим курсор:
Код

if(lastInput!=null){lastInput.focus();};


При желании, или нужде, можно проверять:
а нужно ли в это конкретное поле ставить курсор?
а находится ли искомое поле в зоне видимости, не проскроленно ли это поле за пределы окна?
Думать нужно в каждом конкретном случае, и если нужно что-то делать, стоит эту проверку засунуть в отдельную функцию.

PM MAIL   Вверх
Amphiluke
Дата 16.5.2010, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Цитата(BlackApricot @  16.5.2010,  09:25 Найти цитируемый пост)
как видишь, всё ещё проще.

Не все то, что просто, есть одновременно и хорошо.
Ладно если у вас немного этих инпутов. В этом случае худшее, чего вы получите — это несолидное захламление HTML кода повторяющимися Javascript-овыми вставками. А если инпутов полсотни (пример, конечно, надуманный, но тем не менее)? Собственно, для этого-то и хороши методы динамического «навешивания» обработчиков. Лучше всего пользоваться методами addEventListener и attachEvent. При этом, кстати, благодаря доступности экземпляра объекта Event никаких проблем не возникнет при необходимости дополнительных проверок, какой инпут вызвал событие, находится ли он в зоне видимости и прочее. И код HTML остается чистым, и нет проблем с дублирующимся кодом Javascript, и код этот к тому же самоадаптирующийся к условиям, когда число инпутов может изменяться.
PM   Вверх
BlackApricot
Дата 17.5.2010, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 17.8.2009

Репутация: нет
Всего: нет



Цитата(Amphiluke @  16.5.2010,  09:44 Найти цитируемый пост)
(пример, конечно, надуманный, но тем не менее)

Не вижу ни чего надуманного.

Цитата(Amphiluke @  16.5.2010,  09:44 Найти цитируемый пост)
это несолидное захламление HTML кода повторяющимися Javascript-овыми вставками

Вот это захламление?????
Код
...onfocus(lastInput=this;)...

Кстати, эта проверка единственная, она засунута в функцию, и у меня с этим нет проблем, и эта функция получает объект, какие тут проблемы с получением всех необходимых данных об этом объекте.

Цитата(Amphiluke @  16.5.2010,  09:44 Найти цитируемый пост)
И код HTML остается чистым, и нет проблем с дублирующимся кодом Javascript, и код этот к тому же самоадаптирующийся к условиям, когда число инпутов может изменяться.

Не знаю, не знаю, у меня с количеством инпутов, проблем нет. Я принципиально не пишу код, который сам не разберётся с количеством своих элементов, прибавилось, убавилось...


И ни кто не спорит, что этот простой вариант универсален.
А в моём конкретном случае, твой вариант, есть излишество, реально есть 4 поля и 2 кнопки, после обработки кнопок захотелось вернуть курсор на место, чтобы не щёлкать лишний раз мышью, и всё. В предыдущей версии этого не было, и рука не отвалилась.


Ещё раз спасибо.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0433 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.