Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.05.2010, 23:24
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Аналог onactive (IE)
Хочу найти аналог события onactive (реализованное в IE), для Gecko.
Задача такая: необходимо определять parent, дети которого получили фокус. В IE событие onactive идеально подходит для этой задачи. Даже когда просто кликаешь по parent-у. Это и надо. Событие всплывает, parent определяется. У мозиллы есть два похожих события: DOMActivate и DOMFocusIn. Ни одно из них не генерируется ни при клике, ни при получении фокуса детьми parent-а. Т.к. стандартное событие onfocus не всплывает, я не могу отследить его на parent-е. Проходиться по детям ресурсоёмко, ненадёжно и глупо. Собственно вопрос такой: когда вообще возникают события DOMActivate и DOMFocusIn? Про второе я думаю, что его могут генерировать только те элементы, которые могут получать фокус, но опять же, оно не всплывает. Чем оно от onfocus отличается? Про первое я вообще не знаю, когда оно срабатывает...

Других, ближе к истине, событий я не нашел...

Последний раз редактировалось B~Vladi, 24.05.2010 в 23:30.
Ответить с цитированием
  #2 (permalink)  
Старый 25.05.2010, 10:14
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

DOMActivate
DOMFocusIn
Оба возникают на элементах, которые могут быть активными. Div, к примеру, активным быть не может.
Ответить с цитированием
  #3 (permalink)  
Старый 25.05.2010, 11:05
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

B~Vladi, на самом-то деле можно использовать focus + useCapture (впервые вижу, что это реально пригодилось ):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Test</title>

    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <meta name="generator" content="Geany 0.18.1.1" />

    <style type="text/css">
    .content {
        border: 1px solid green;
    }
    </style>

    <script type="text/javascript">
    function init() {
        document.body.firstChild.addEventListener(
            'focus',
            function(e) {
                var el = (e.target || e.srcElment),
                    v = el.value || el.innerText || el.textContent;
                alert([e.type, v].join(' AND '));
            },
            true // important
        );
    }
    </script>
</head>

<body onload="init()"><div class="content">
    <p><input type="text" value="Input::Text" /></p>
    <p><input type="button" value="Input::Button" /></p>
    <p><button>Button</button></p>
    <p><select>
        <option value="1">first</option>
        <option value="2">second</option>
    </select></p>
    <p><textarea>Textarea</textarea></p>
</div></body>
</html>


UPD Для Chrome + Safari нужен еще такой же бинд на DOMActivate, поскольку у них focus на button (input:button) не срабатывает.

Последний раз редактировалось e1f, 25.05.2010 в 11:19. Причина: upd
Ответить с цитированием
  #4 (permalink)  
Старый 25.05.2010, 17:25
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

e1f, спасибо. Действительно, не думал, что useCapture может пригодиться. А если вместо фокуса повесить только DOMActivate, чтобы везде работало... Надо попробовать.
Ответить с цитированием
  #5 (permalink)  
Старый 25.05.2010, 17:32
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

B~Vladi, DOMActivate в ФФ возникает не для всех контролов, я же давал линк:
Fires:
button, input:button, input:checkbox, input:file, input:image, input:рassword, input:radio, input:reset, input:submit

Does not fire:
input:text, select, textarea
Ответить с цитированием
  #6 (permalink)  
Старый 25.05.2010, 20:16
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Я понял что не для всех. Будем экспериментировать.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
аналог HTMLElement в IE? Researcher Events/DOM/Window 3 10.04.2011 14:04
Помогите определить фреймворк или найти аналог rolph Библиотеки/Тулкиты/Фреймворки 2 15.12.2009 13:06
аналог getElementsByName MaxB jQuery 2 04.08.2009 19:39
помогите написать аналог строки include("index.php?open=1") на js bushstas Общие вопросы Javascript 1 19.07.2009 02:48
Аналог книги Simply JavaScript twolf Общие вопросы Javascript 2 20.07.2008 13:04