Конечная цель: красивые страницы для пользователей мыши, доступные страницы для пользователей клавиатуры. Эффект, который я хочу, состоит в том, чтобы щелкнуть привязку, чтобы не создавать контуры во время и не оставлять контуры после. Кроме того, я хочу, чтобы вкладки клавиатуры перемещали фокус и, таким образом, окружали элементы контуром. Следующий код работает в FF (и я предполагаю, что другие современные браузеры, но я должен буду проверить их завтра в офисе), но не IE6-8. Проблема заключается в том, что onmousedown, кажется, не расплывается, как ожидалось:
var links = document.getElementsByTagName('a');
for (var i=0; i < links.length; i++) {
links[i].onmousedown = function () {
this.blur();
return false;
}
links[i].onclick = function() {
this.blur();
}
}
Один компромисс был бы, если бы у кого-нибудь было решение, которое может обработать случай в IE, где пользователь размышляет, мышко отходит от якоря, затем мышивает вверх и не оставляет никаких контуров позади, было бы шагом в правильном направлении. Спасибо.
РЕДАКТИРОВАТЬ: пятница, 5 марта 2010
Мои самые глубокие извинения за то, что я так долго возвращался к этому, но мне нужно было решение, которое работало бы в максимально возможном количестве браузеров. Что ж, получается, что для тайм-аутов не нужны только некоторые схемы, классы и управление фокусом. Следующее решение работает в IE6 +, FF2 +, Safari 3+ и Chrome. Я не тестировал в Опере, но был бы рад, если бы кто-то мог подтвердить / опровергнуть, что это работает. Далее следует более suedo-код, чем чистый JS. Я оставляю это в качестве упражнения для читателя, чтобы реализовать в вашей любимой структуре:
var anchorEventIsMouse = true;
$('a').mousedown(function() {
anchorEventIsMouse = true;
this.hideFocus = true; /* IE6-7 */
this.style.outlineStyle = 'none'; /* FF2+, IE8 */
this.addClass('NoOutline'); /* see click func */
this.setFocus(); /* Safari 3+ */
});
$('a').keydown(function() {
anchorEventIsMouse = false;
});
$('a').blur(function() {
this.style.outlineStyle = '';
this.hideFocus = false;
this.removeClass('NoOutline');
});
$('a').click(function(e) {
/* Adding class NoOutline means we only allow keyboard
* clicks (enter/space) when there is an outline
*/
if (!anchorEventIsMouse && this.hasClass('NoOutline')) {
e.stopEventPropagation();
}
});