Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.02.2010, 01:18
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

отмена получения фокуса
ну пускай фокус нельзя отменить с помощью 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>
Ответить с цитированием
  #2 (permalink)  
Старый 10.02.2010, 19:00
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

или может есть более цивилизованные пути решения проблемы?
Ответить с цитированием
  #3 (permalink)  
Старый 10.02.2010, 19:32
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Кстати, это при клике. Если выделить ссылку табом, то в ФФ будет только одна пара focus-blur, мышью - две.

UPD Вот, похоже, на эту тему: https://bugzilla.mozilla.org/show_bug.cgi?id=53579

Последний раз редактировалось e1f, 10.02.2010 в 19:52.
Ответить с цитированием
  #4 (permalink)  
Старый 10.02.2010, 21:14
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

<!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 Ммм, а если нажимать средней кнопкой -- все гут

Последний раз редактировалось e1f, 11.02.2010 в 02:30.
Ответить с цитированием
  #5 (permalink)  
Старый 11.02.2010, 02:46
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

В общем, если задача стоит просто не допустить фокуса "любой ценой" , то вроде бы достаточно так:
<!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>
Ответить с цитированием
  #6 (permalink)  
Старый 11.02.2010, 04:39
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

bug вроде не про то

Сообщение от e1f
При mousedown на link -- двойной focus/blur. При это фокус вроде как на второй ссылке. Ппц...
причем получается так
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>


Сообщение от e1f
В общем, если задача стоит просто не допустить фокуса "любой ценой" , то вроде бы достаточно так:
ну любой ценой вроде не надо было. Да и blur в onfocus хватает. Просто странно ff себя ведет...

Вообще задача была примерно такая: есть ссылка выполненная в виде картинки, и вокруг нее эта рамочка появлялась... совсем не в тему
Ответить с цитированием
  #7 (permalink)  
Старый 11.02.2010, 10:49
Аватар для Serg_pnz
Сам по себе
Отправить личное сообщение для Serg_pnz Посмотреть профиль Найти все сообщения от Serg_pnz
 
Регистрация: 09.06.2009
Сообщений: 963

Цитата:
Вообще задача была примерно такая: есть ссылка выполненная в виде картинки, и вокруг нее эта рамочка появлялась... совсем не в тему
Это не так лечится)))
Это лечится в css:
a {outline: none;}

Спасибо http://www.htmlbook.ru/faq/?a=67
Ответить с цитированием
  #8 (permalink)  
Старый 11.02.2010, 12:52
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от Serg_pnz
a {outline: none;}
а для IE есть какое-то свойство в JS, попробую вспомнить…

--------

а вот нашел http://webmaster.ee/javascript/JavaS...html#hideFocus
Ответить с цитированием
  #9 (permalink)  
Старый 11.02.2010, 13:08
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Пуф, точно не в ту степь
Ответить с цитированием
  #10 (permalink)  
Старый 11.02.2010, 16:35
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Я обычно использую
a img {border: none; outline: none} a {outline: none}
 — убирает бордюр и изображений и пунктирную рамку вокруг активной ссылки в Fx
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление страницы после получения ответа от сервера potrashitel AJAX и COMET 9 24.02.2015 10:04
Скрытие блоков после получения ответа nemo Общие вопросы Javascript 1 22.11.2009 10:22
Дописать стили после получения ответа nemo AJAX и COMET 1 21.11.2009 20:46
Как поймать потерю фокуса у текстбоска? sergeos Общие вопросы Javascript 1 11.02.2009 00:38
Скрытие блока после потери фокуса Nubi jQuery 2 06.02.2009 22:58