Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.03.2016, 17:02
Кандидат Javascript-наук
Отправить личное сообщение для 12345678 Посмотреть профиль Найти все сообщения от 12345678
 
Регистрация: 03.09.2012
Сообщений: 109

onkeydown когда окно/вкладка не в фокусе
Окей, тупой вопрос и ответ, скорее всего, "Нет". Можно ли сделать так, что бы на странице срабатывали события onkeydown, onkeyup и остальные подобные когда окно броузера (или его вкладка) не в фокусе?
Ответить с цитированием
  #2 (permalink)  
Старый 21.03.2016, 11:43
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от 12345678 Посмотреть сообщение
Окей, тупой вопрос и ответ, скорее всего, "Нет". Можно ли сделать так, что бы на странице срабатывали события onkeydown, onkeyup и остальные подобные когда окно броузера (или его вкладка) не в фокусе?
Прежде всего, совершенно непонятно, зачем это может быть нужно?
Ответ на вопрос - и нет, и да.
Нет - потому что на вкладке не в фокусе события такого типа не могут произойти естественным образом.
Да - такие события можно сгенерировать.
Пример первый - генерация события через заданный интервал.
<!DOCTYPE html>
<html>
<head>
    <title>First Page Interval</title>
    <script>
        var count = 0;
        function changevalue(item) {
            item.value = (count++).toString();
        }
        setInterval(function () {
            var event = document.createEvent("Event"); 
            event.initEvent("keydown", true, true);
            var item = document.getElementById('test');
            item.dispatchEvent(event);
        }, 1000);

    
    </script>
</head>
<body>
   <input type="text" id="test" value = "" onkeydown="this.value = (count++).toString();"/>
</body>
</html>

Если этот пример открыть в первой вкладке - счетчик в инпуте будет обновляться с использованием генерируемого события keydown. Если открыть вторую вкладку и через некоторое время вернуться на первое - увидим, что счетчик нарастил значение.

Второй пример - генерация события в первой вкладке по событию во второй с использованием для передачи localStorage и события storage ( идея позаимствована у Poznakomlus как засечь повторное открытие страницы? )
Код для первой вкладки
<!DOCTYPE html>
<html>
<head>
    <title>First Page Listener</title>
    <script>
        var count = 0;
        if (window.addEventListener) {
            window.addEventListener("storage", handle_storage, false);
        } else {
            window.attachEvent("onstorage", handle_storage);
        };
        function handle_storage(e) {
            if (!e) { e = window.event; }
            var event = document.createEvent("Event"); 
            event.initEvent("keydown", true, true);
            var item = document.getElementById('test');
            item.dispatchEvent(event);
        }; 
    </script>
</head>
<body>
   <input type="text" id="test" value = "" onkeydown="this.value = (count++).toString();"/>
</body>
</html>

Код для второй вкладки
!DOCTYPE html>
<html>
<head>
    <title>Secomd Page Send</title>
    <script>
        var count = 0;
        function send_event() {
            localStorage.setItem('event', (count++).toString());    
        }
    </script>
</head>
<body>
   <input type="button" value = "Send Event" onclick="send_event();"/>
</body>
</html>

Сразу предупреждаю, что коды работоспособны в IE9+ и в Хроме - в других не проверял, не стояла задача сделать полноценные рабочие коды, а только демонстрация идей.
Конечно, ситуация совершенно бредовая, но чисто теоретически...

Последний раз редактировалось Dilettante_Pro, 22.03.2016 в 10:06.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Показывать иконку когда input в фокусе Mrs.Haneki Элементы интерфейса 7 04.12.2015 13:06
Когда писать плагин к jQuery, а когда простую функцию? kiowas jQuery 4 26.06.2013 13:05
Как отследить пропал ли текст placeholder-а при фокусе на поле ввода z1987 Общие вопросы Javascript 2 19.12.2012 10:10
Скрипт счетчика тормозит когда вделаю страницу активной denisOgr jQuery 1 30.10.2011 15:15
Как работает оператор new когда функция-конструктор что-то возвращает ? olek Общие вопросы Javascript 2 06.03.2011 12:17