Google Chrome Javascript Link Bug - PullRequest
       2

Google Chrome Javascript Link Bug

6 голосов
/ 19 июня 2011

При нажатии на ссылку в Google Chrome событие фокуса не срабатывает.Все другие браузеры запускают событие focus для ссылок.

<a href=# onfocus="console.log('focus')">Link</a>

Я не хочу прикреплять событие к mousedown, но к onfocus.

У всех есть идеи для обхода проблемы.

РЕДАКТИРОВАТЬ:

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

Даже не сфокусированные элементы с tabindex активируют фокус на клике в Google Chrome.

<div tabindex="-1" onfocus="console.log('focus')">div</div>

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

Использование этого html:

<a href=# onfocus="console.log('focus')" onmousedown="console.log('mousedown')">Link</a>

Являются ли онилюбой способ сделать недействительным второй onmousedown вызов, чтобы предотвратить повторный вызов функции в браузерах, отличных от Google.

РЕДАКТИРОВАТЬ 2:

После некоторого дальнейшего тестирования <input type=radio>Также не удается вызвать фокус в Google Chrome.Почему в мире Google Chrome, как это, в то время как Opera, IE и Firefox все в порядке.Что сумасшедшего, так это то, что браузер мобильного веб-набора даже вызывает фокусировку на ссылках, когда я пробую его на своем устройстве Android.

Ответы [ 3 ]

3 голосов
/ 19 июня 2011

Это на самом деле работает просто отлично, за исключением того, что событие фокусировки не вызывается простым нажатием на ссылку (попробуйте вкладки, и вы увидите срабатывание события).Я не думаю, что это ошибка, почему бы не просто защитить и использовать оба?

1 голос
/ 20 июня 2011

Чтобы обойти двойные события focus в рабочих браузерах при одновременном получении события focus для запуска в Chrome, можно обойтись при проверке события щелчка, если на * страницы, а если нет, то вызвать событие focus.

С помощью jQuery это можно сделать так:

$('a').click(function(e){
     if(!$('*:focus').length) $(this).trigger('focus');         
});

пример: http://jsfiddle.net/niklasvh/qmcUt/

0 голосов
/ 19 июня 2011

Вы можете использовать небольшой взломать:

<a href="#" onfocus="console.log('focus')" onclick="this.focus()">Link</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...