отмена получения фокуса
ну пускай фокус нельзя отменить с помощью return false/preventDefault. Но что самое интересно, если вызвать blur в обработчике focus (из-за щелчка мышью) в ff, то событие фокус возникает еще раз на том же элементе. Кто-нибудь может объяснить физику процесса?
Для полноты картины: опера не вызывает onblur, а в chrome, похоже, эти события не реализованы. тестовый код: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <script type="text/javascript"> function d( t ) { var br = document.createElement('br'); document.body.appendChild( br ); var n = document.createTextNode( t ); document.body.appendChild( n ); } </script> </head> <body> <a href="#" onblur="d('blur');" onfocus="d('focus'); this.blur();">link</a> </body> </html> |
или может есть более цивилизованные пути решения проблемы?
|
Кстати, это при клике. Если выделить ссылку табом, то в ФФ будет только одна пара focus-blur, мышью - две.
UPD Вот, похоже, на эту тему: https://bugzilla.mozilla.org/show_bug.cgi?id=53579 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <script type="text/javascript"> function init() { for ( var i in { 'DOMActivate': 1, 'click': 1, 'mousedown': 1, 'mouseup': 1, 'contextmenu': 1 } ) document.body.firstChild.addEventListener(i, function(e){ d( e.type ); }, true); } function d( t ) { var br = document.createElement('br'); document.body.appendChild( br ); var n = document.createTextNode( t ); document.body.appendChild( n ); } function f( target ) { d('focus'); target.nextSibling.focus(); } </script> </head> <body onload="init()"><a href="#" onblur="d('blur')" onfocus="f(this)">link</a><a href="#">.</a></body> </html> При mousedown на link -- двойной focus/blur. При это фокус вроде как на второй ссылке. Ппц... UPD Ммм, а если нажимать средней кнопкой -- все гут :) |
В общем, если задача стоит просто не допустить фокуса "любой ценой" :), то вроде бы достаточно так:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <script type="text/javascript"> function d( t ) { var br = document.createElement('br'); document.body.appendChild( br ); var n = document.createTextNode( t ); document.body.appendChild( n ); } </script> </head> <body><a href="#" onblur="d('blur')" onfocus="d('focus');this.blur()" onmousedown="d('mousedown');this.blur();return false" oncontextmenu="d('contextmenu');this.blur();return false;">link</a> </body> </html> |
bug вроде не про то
Цитата:
focus0 blur0 focus1 blur1 focus0 blur0 focus1 но вообще дело в том, что смена фокуса происходит внутри обработчика смены фокуса. Чувствуешь, м? :) (хотя могло бы и работать) Если изменить фокус после завершения обработчиков, то все ok <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <script type="text/javascript"> function d( t ) { var br = document.createElement('br'); document.body.appendChild( br ); var n = document.createTextNode( t ); document.body.appendChild( n ); } </script> </head> <body> <a href="#" onfocus=" d('focus0') var self = this; setTimeout( function() { self.nextSibling.focus(); }, 0); " onblur="d('blur0')" >link0</a ><a onfocus="d('focus1')" onblur="d('blur1')" href="#">link1</a> </body> </html> Цитата:
Вообще задача была примерно такая: есть ссылка выполненная в виде картинки, и вокруг нее эта рамочка появлялась... совсем не в тему |
Цитата:
Это лечится в css: a {outline: none;} Спасибо http://www.htmlbook.ru/faq/?a=67 |
Цитата:
-------- а вот нашел http://webmaster.ee/javascript/JavaS...html#hideFocus |
Пуф, точно не в ту степь :)
|
Я обычно использую
a img {border: none; outline: none} a {outline: none}— убирает бордюр и изображений и пунктирную рамку вокруг активной ссылки в Fx |
Часовой пояс GMT +3, время: 22:58. |