window.onblur не работает

Кажется, я не могу заставить window.onblur работать правильно.

window.onblur = console.log('blur');

Когда прослушиватель применяется к окну, он просто запускается при загрузке страницы, но не когда окно теряет фокус.


person CJT3    schedule 28.04.2012    source источник


Ответы (3)


Рюдис сказал вам, что делать, но не объяснил, почему это не сработало. Понимание механики этого поможет вам понять, как действовать дальше.

Причина в том, что исходный код запускает команду console.log('blur') немедленно и использует возвращаемое значение этого вызова в качестве события окна onblur.

Возвращаемое значение console.log() зависит от браузера, но в качестве аргумента допустим, что оно возвращает логическое значение true. Это означает, что ваш исходный код эквивалентен написанию этого:

window.onblur = true;

Что явно не сработает, как вы ожидаете.

Что вам нужно, так это установить window.onblur на функцию, которая будет вызываться каждый раз, когда запускается событие onblur. Это достигается путем упаковки кода в function() {}, согласно ответу Рюдиче.

Вы также можете добиться этого в простых случаях, не указывая скобки в имени функции, которую вы хотите вызвать. Но этот метод работает только в том случае, если у вас нет аргументов, которые вы хотите передать функции, поэтому он не подходит для вашего примера console.log.

Надеюсь, это поможет. Если вы все еще озадачены, в Интернете есть множество ресурсов. Попробуйте поискать в Google такие фразы, как «передача функций javascript в качестве аргументов», и посмотрите, что получится.

person Spudley    schedule 28.04.2012

person    schedule
comment
Теперь... как заставить его работать, если пользователь переключает вкладки или щелкает в адресной строке? - person CJT3; 28.04.2012
comment
@CharlesJohnThompsonIII Я думаю, что это может помочь, но вы, возможно, уже забыли об этом. У меня была похожая проблема, и это было моим решением на данный момент. - person Steve; 23.01.2016
comment
@CharlesJohnThompsonIII Ознакомьтесь с API видимости страницы на MDN. событие visibiltychange может быть тем, что вы ищете. - person Govind Rai; 26.02.2018

person    schedule
comment
@FlorianEck Да, это просто функция со стрелкой, это стандартная часть JavaScript (добавлена ​​в ES6, 2015). - person Florrie; 03.12.2016