Аналог 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, время: 19:45. |