Конечная цель: красивые страницы для пользователей мыши, доступные страницы для пользователей клавиатуры. Эффект, который я хочу, - это щелкнуть якорь, чтобы не создавать контур во время и не оставлять контуры после. Кроме того, я хочу, чтобы клавиатура перемещала фокус и, таким образом, окружала элементы контуром. Следующий код работает в 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. Я не тестировал в Opera, но хотел бы, чтобы кто-то мог подтвердить/опровергнуть, что он работает. Далее следует более 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();
}
});