Почему addEventListener не работает для события фокуса переключателя в Chrome? - PullRequest
3 голосов
/ 03 января 2012

Рассмотрим следующий пример (также доступен здесь: http://jsfiddle.net/hq8Fg/1/).. Он отлично работает в IE9, но не работает в Chrome 16.

В IE, если я нажимаю переключатель, я вижу сообщение, но в Chrome ничего не происходит.

<!DOCTYPE html>
<html>
<head>
<title>Nothing</title>
<script type="text/javascript">
  function begin() {
    var rb1 = document.getElementById('rb1');
    rb1.addEventListener('focus', function() { document.getElementById("theText").value = "focus"; }, false);
  }
</script>
</head>
<body onload="begin()">
    <input id="rb1" type="radio" />
    <textarea id="theText"></textarea>
</body>
</html>

Есть идеи, почему он не работает в Chrome и что я могу сделать, чтобы это исправить?

p.s. Я знаю, что, вероятно, могу использовать такую ​​библиотеку, как JQuery, но я хочу знать, возможно ли это без использования каких-либо библиотек.

Ответы [ 3 ]

4 голосов
/ 03 января 2012

Согласно этому меньше, чем звездный источник , событие фокусировки для радиокнопки должно срабатывать только тогда, когда вы вкладываете в нее, что вы можете видеть в своей скрипке.

Я посмотрю, смогу ли я найти лучшую документацию по этому вопросу - в идеале, MDN.

EDIT

С эта статья MDN

Изменение фокуса

Есть несколько способов изменить текущий фокусированный элемент. Проще всего вызвать метод фокуса элемента XUL, который вы хочу установить фокус на. Метод размытия может быть использован для удаления фокус с элемента. Следующий пример демонстрирует это:

Пример 5: просмотр исходного кода

<button label="Focus" oncommand="document.getElementById('addr').focus()"/> Или вы можете использовать методы advanceFocus и rewindFocus в диспетчере команд. Эти методы перемещают фокус на следующий элемент в последовательности или предыдущий элемент соответственно. Вот что происходит, когда пользователь нажимает TAB или Shift + Tab.

Для текстовых полей специальный атрибут, фокус которого добавляется всякий раз, когда элемент имеет фокус. Вы можете проверить наличие этого атрибут, чтобы определить, имеет ли элемент фокус, либо из сценарий или в таблице стилей. Он будет иметь значение true, если текстовое поле имеет фокус и, если текстовое поле не имеет фокус, атрибут не будет присутствовать.

Предположим, вы хотите переместить фокус с того места, где оно находится в данный момент, на следующее место браузер считает, что это должно быть. Пользователь обычно делает это, нажав клавишу «Tab». Вы можете сделать это везде, где у вас есть XUL Документ браузера просто:

(акцент мой)

2 голосов
/ 03 января 2012

Вы можете попробовать событие onclick, поскольку проблема не в том, что событие не вызывается, когда элемент фокусируется;Проблема в том, что он действительно не сфокусирован на клике.Вы можете понять это, сфокусировав текстовую область и нажав SHIFT + Tab .

1 голос
/ 03 января 2012

Как я могу судить, событие фокусировки срабатывает только для переключателя, когда клавиатура используется для перехода к переключателю.Для щелчка по переключателю используйте событие щелчка следующим образом: http://jsfiddle.net/jfriend00/XatCv/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...