Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.07.2015, 11:16
Аватар для Momon
Аспирант
Отправить личное сообщение для Momon Посмотреть профиль Найти все сообщения от Momon
 
Регистрация: 02.12.2014
Сообщений: 72

Объясните пожалуйста что происходит с фокусом в Chrome?
window.onfocus = function() {
 document.getElementById("input").focus();
}
document.getElementById("input").onfocus = function() {
  console.log("Сработал обработчик фокуса на поле");
}

В FF обработчик фокуса на поле срабатывает 1 раз при фокусировке на окне.
В Chrome обработчик фокуса на поле срабатывает 2 раза при фокусировке на окне (при переходе с др. окна или вкладки).

Чтобы увидеть эффект нужно открыть https://jsfiddle.net/6bnspf5q/1/ потом кликнуть в пустое место рядом с полем (в окошке result), потом перейти на другую вкладку или в другое окно, потом вернуться и обработчик фокуса на поле сработает 2 раза!

Версия №1
Сначала фокусировка на окне вызывает фокус на поле, после чего срабатывает обработчик фокусировки на поле и выводит сообщение. А потом ещё раз срабатывает обработчик фокусировки на поле, но уже как бы по настоящему!

Версия №2
После срабатывания моего кода, Chrome по своей инициативе в наглую подставляет фокус куда ему взбрендилось.

Последний раз редактировалось Momon, 31.07.2015 в 11:39.
Ответить с цитированием
  #2 (permalink)  
Старый 31.07.2015, 14:58
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

var  timerID;
window.onfocus = function() {
 clearTimeout(timerID);
 timerID = setTimeout(function() {document.getElementById("input").focus();},100);
}
document.getElementById("input").onfocus = function() {

  console.log("Сработал обработчик фокуса на поле");
}
Ответить с цитированием
  #3 (permalink)  
Старый 31.07.2015, 15:09
Аватар для Momon
Аспирант
Отправить личное сообщение для Momon Посмотреть профиль Найти все сообщения от Momon
 
Регистрация: 02.12.2014
Сообщений: 72

Deff,
Спасибо за помощь, но не мог бы ты пояснить что происходит? С таймером работает как надо, но в чём проблема то была?
Ответить с цитированием
  #4 (permalink)  
Старый 31.07.2015, 23:09
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Momon,
Есть иное свойство:

if ('visibilityState' in document) {
    alert ('Да поддерживает!');
    alert('status вкладки: ' + document.visibilityState)
}
Ответить с цитированием
  #5 (permalink)  
Старый 31.07.2015, 23:14
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Momon
Спасибо за помощь, но не мог бы ты пояснить что происходит?
Ну подобная фишка называется "Дребезг контактов", ранее была медвежуть в Firefox при onresize и onscroll - затем пофиксили. При однократном действии события срабатывали до десятка раз. Потом пофиксили. Наверное в этот момент выполнялось много дополнительных действий, которые прерывали обработку события
Ответить с цитированием
  #6 (permalink)  
Старый 01.08.2015, 09:14
Аватар для Momon
Аспирант
Отправить личное сообщение для Momon Посмотреть профиль Найти все сообщения от Momon
 
Регистрация: 02.12.2014
Сообщений: 72

Deff,
Спасибо за объяснение.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поюзайте хомячка Nanto Ваши сайты и скрипты 30 06.06.2011 22:16
Объясните, пожалуйста, разницу описанных внутри примеров Fyntik Events/DOM/Window 1 02.04.2010 21:09
Что происходит с символами во время выполнения запроса? Yazla Общие вопросы Javascript 4 11.12.2009 17:09
Объясните мне что я делаю не так. Yanub Общие вопросы Javascript 10 24.08.2009 13:04
Объясните пожалуйста значение символов после переменной Анатолий Общие вопросы Javascript 1 09.01.2009 03:50