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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как узнать, в фокусе ли элемент 
V
    Опции темы
GZep
Дата 26.10.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

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



Здравствуйте!

Вот нашел такую конструкцию:
Код

if (document.form.element.hasFocus()) {
     alert ("В фокусе");
} else {
     alert ("Не в фокусе");
}


Только кроме как в ИЕ, вроде этот метод не подходит. Есть ли универсальный способ?


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
korisarimi
Дата 26.10.2006, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А чем не подходит просто 

Код


onFocus="javascript:alert('В фокусе')"

PM MAIL   Вверх
GZep
Дата 27.10.2006, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

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



Нет, мне надо сделать условие, где проверяется находится ли элемент формы в фокусе. Я долго думал как это сделать, но ничего не вышло. onFocus - вообще не в кассу тут.


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Avb
Дата 27.10.2006, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



По событию focus ставишь признак, что элемент в фокусе (например, заносишь в соответствующую переменную ссылку на данный объект). По событию blur - снимаешь этот признак. 
Как это организовать тебе виднее.
PM MAIL   Вверх
GZep
Дата 27.10.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

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



Короче я понял. С переменной у меня были идеи - не подошло, (не по эстетическим соображениям smile ). Странно, что с явескрипте нельзя просто вот взять и узнать в фокусе ли элемент. Я думаю - это достаточная нужная функция...Но её просто нет,  а hasFocus() - отстой.

Это сообщение отредактировал(а) GZep - 27.10.2006, 15:54


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Avb
Дата 31.10.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



GZep, не спешите отчаиваться.
Как Вам такой вариант:
Всем элементам, которые надо проверять добавить свойство hasFocus и навесить события focus и blur, обработчики которых будут менять это св-во соотв-м образом.

Пример:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript" src="js/prototype.js"></script>  
</head> 
<body>
<input type="text" value="" />
<input type="text" value="" />
<input type="text" value="" />
<input type="text" value="" />
<input type="text" value="" />
<input type="text" value="" />
<input type="text" value="" />
<input type="text" value="" />
<input type="text" value="" />
<input type="text" value="" />
<input type="text" value="" />
<div id="test">test</div>
    <script type="text/javascript">
    $$("body input").each(function(element){
        element.hasFocus = false;
        Event.observe(element, "focus", function(){element.hasFocus = true;}, false);
        Event.observe(element, "blur",  function(){element.hasFocus = false;},  false);
        Event.observe(element, "mouseover",  function(){ $("test").firstChild.nodeValue = element.hasFocus; },  false);
    });
    </script>
</body>
</html>


Тут я использую библиотеку prototype.js (Привык уже.  Но главное логика, а реализовать при необходимости можно и без prototype.js)
$$("body input") - массив инпутов.
each - понятно. Для каждого элемента массива выполняем функцию-аргумент.
element.hasFocus = false; - изначально фокуса нет.
Event.observe - кроссбраузерный addEventListener/attachEvent (который к тому же заботится о том, чтоб не было memory leaks)
Event.observe(element, "mouseover",  function(){ $("test").firstChild.nodeValue = element.hasFocus; },  false); - для тестирования
PM MAIL   Вверх
GZep
Дата 1.11.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

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



Avb, спасибо Вам огромное! Очень красивое решение - пройтись циклом по всем элементам...

Сам я не догадался до такого решения, но к моему счастью в мире еще есть умные люди. smile 

Это сообщение отредактировал(а) GZep - 1.11.2006, 14:16


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


 




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


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

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