Аналог onactive (IE)
Хочу найти аналог события onactive (реализованное в IE), для Gecko.
Задача такая: необходимо определять parent, дети которого получили фокус. В IE событие onactive идеально подходит для этой задачи. Даже когда просто кликаешь по parent-у. Это и надо. Событие всплывает, parent определяется. У мозиллы есть два похожих события: DOMActivate и DOMFocusIn. Ни одно из них не генерируется ни при клике, ни при получении фокуса детьми parent-а. Т.к. стандартное событие onfocus не всплывает, я не могу отследить его на parent-е. Проходиться по детям ресурсоёмко, ненадёжно и глупо. Собственно вопрос такой: когда вообще возникают события DOMActivate и DOMFocusIn? Про второе я думаю, что его могут генерировать только те элементы, которые могут получать фокус, но опять же, оно не всплывает. Чем оно от onfocus отличается? Про первое я вообще не знаю, когда оно срабатывает... Других, ближе к истине, событий я не нашел... |
DOMActivate
DOMFocusIn Оба возникают на элементах, которые могут быть активными. Div, к примеру, активным быть не может. |
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, спасибо. Действительно, не думал, что useCapture может пригодиться. А если вместо фокуса повесить только DOMActivate, чтобы везде работало... Надо попробовать.
|
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 |
Я понял что не для всех. Будем экспериментировать.
|
Часовой пояс GMT +3, время: 08:57. |