Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.09.2014, 09:59
Новичок на форуме
Отправить личное сообщение для billi Посмотреть профиль Найти все сообщения от billi
 
Регистрация: 25.09.2014
Сообщений: 1

Как обойти стандартное поведение blur?
Есть текстовое поле, смысл в том, что когда курсор выходит из него забираются данные из поля и отправляются на сервер. Задача не сложная. Но если для ее решения использовать событие blur или focusout получается, что обработчик срабатывает и тогда, когда пользователь хочет переключиться между вкладками в браузере и когда пользователь захочет переключиться между приложениями в ОС.
Как обойти такое поведение? Т.е. необходимо, чтобы обработчик blur срабатывал только когда пропадал фокус в пределах текущего окна браузера.
Заранее благодарен.
Ответить с цитированием
  #2 (permalink)  
Старый 26.09.2014, 10:14
Профессор
Отправить личное сообщение для WorM32 Посмотреть профиль Найти все сообщения от WorM32
 
Регистрация: 11.02.2014
Сообщений: 303

Видимо придеться слушать blur у window, ставить флаг, когда событие зажигается и в обработчике блюра поля смотреть, если данный флаг или нет. Проблема в том, что у поля событие должно зажечься раньше, чем у окна. Соответственно, скорее всего, придется использовать setTimeout(func, 0);
Ответить с цитированием
  #3 (permalink)  
Старый 26.09.2014, 18:17
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

blur окна это сферический конь в вакууме. Нет, как-то добиваются, во-первых сразу не через JS, а сугубо через DOM (onblur), во-вторых все равно не пашет.
Ответить с цитированием
  #4 (permalink)  
Старый 26.09.2014, 18:21
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Я бы предложил ТСу не вести себя так, чтобы приходилось обходить нормальный контекст. Однако логика потери фокуса элемента интерфейса заключается в получении фокуса другим элементом. Следовательно если после потери проверить находки и найдутся - значит в пределах документа, иначе - убежал.

Кстати, @#%$%&ий ёкзель меня систематически достает этой своей фишкой - отключение подсветки выделенных строк при потере фокуса окном. Какой-то дебил в МС работал в одном окне и подумал а зачем юзеру два рядом?

Последний раз редактировалось kostyanet, 26.09.2014 в 18:24.
Ответить с цитированием
  #5 (permalink)  
Старый 26.09.2014, 18:47
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от kostyanet
Однако логика потери фокуса элемента интерфейса заключается в получении фокуса другим элементом.
Разве? А если это был клик по div'у?
Ответить с цитированием
  #6 (permalink)  
Старый 26.09.2014, 18:51
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

А, блин, точно, это же не десктоп. Ну значит облом.

Нет, блин, надо проверить - на тело повесить щелчок и посмотреть доплывет до него фокус или нет.
Ответить с цитированием
  #7 (permalink)  
Старый 29.09.2014, 10:21
Профессор
Отправить личное сообщение для WorM32 Посмотреть профиль Найти все сообщения от WorM32
 
Регистрация: 11.02.2014
Сообщений: 303

Сообщение от kostyanet Посмотреть сообщение
blur окна это сферический конь в вакууме. Нет, как-то добиваются, во-первых сразу не через JS, а сугубо через DOM (onblur), во-вторых все равно не пашет.
Бред какой-то.

Сообщение от kostyanet Посмотреть сообщение
Нет, блин, надо проверить - на тело повесить щелчок и посмотреть доплывет до него фокус или нет.
Если фокусить нечего, фокус уходит на body всегда.
Ответить с цитированием
  #8 (permalink)  
Старый 01.10.2014, 05:46
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от WorM32
Бред какой-то.
Процитируйте не бред, типа там

window.addEventListener('blur',blah_blah);

чтобы blah_blah работала.
Ответить с цитированием
  #9 (permalink)  
Старый 01.10.2014, 08:58
Профессор
Отправить личное сообщение для WorM32 Посмотреть профиль Найти все сообщения от WorM32
 
Регистрация: 11.02.2014
Сообщений: 303

Сообщение от kostyanet Посмотреть сообщение
Процитируйте не бред, типа там

window.addEventListener('blur',blah_blah);

чтобы blah_blah работала.
<input type="text"><br />
    <span id="result"></span>
<script>
var result = document.getElementById('result');
document.getElementsByTagName('input')[0].addEventListener('blur', function () {
    result.innerHTML += 'input blur <br>';
}, true);

window.addEventListener('blur', function () {
    result.innerHTML += 'window blur <br>';
}, true);
</script>
Ответить с цитированием
  #10 (permalink)  
Старый 01.10.2014, 12:16
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Круто, работает! Признаю свой бред.

И кажется я понял как он зародился. Ничтоже сумняще я повесил на размытие функцию console.log('blur') и сделав подвал браузера видимым начал переключаться между окнами. Х нанэ, не размывалось. Потащился в инет читать - там понаписано, короче, думаю, не суждено.

Оказывается консоль браузера - это отдельное окно. Когда оно активно то в клиенте уже никакого размытия не будет. Его и не было.

Спасибо.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно обойти блокировку всплывающих окон? azazello Общие вопросы Javascript 12 20.07.2015 10:18
Открытие div блока при первом визите на сайт Nushaba Общие вопросы Javascript 28 20.12.2013 21:24
Как обойти overflow-x в IE6 AlexMak (X)HTML/CSS 2 26.11.2010 14:52
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20
Масштабирование браузером - как обойти? Sandr Internet Explorer 7 25.04.2009 01:44