Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.03.2018, 19:37
Аватар для Conus
Аспирант
Отправить личное сообщение для Conus Посмотреть профиль Найти все сообщения от Conus
 
Регистрация: 05.12.2015
Сообщений: 85

События клавиатуры, keypress зацикливается | при удержании ?
при удержании keypress зацикливается и не срабатывает keyup
при всем этом все остальные функции работают как ни в-чем не бывало

если удерживать не долго то зацикливания не происходит
наверно это как-то связано с переполнением
подскажите пожалуйста
<!DOCTYPE HTML>
<html>
 <head>

<script type="text/JavaScript">	
var obj = {}, step;
obj.even = '';
 obj.Is = false;
var	IsKey = function() { return obj.Is; }, even = function() { return obj.even; };	
function Step(e) 
{
	
	if (typeof obj.count  === 'undefined') { obj.count  = 0; } else  { obj.count++; }
	 document.body.innerHTML = IsKey() + ' ' + obj.even + obj.count
}

(  
  ( 
	 function(elem, type, Handl)
	 {
	    if (elem.attachEvent){ elem.attachEvent("on"+type, Handl) } else { elem.addEventListener(type, Handl, false) }
		return arguments.callee;
	 }
 
 )(window, 'keydown', function(e) { obj.Is = true; obj.even = e;  step = setInterval(Step, 10) }  )
)(window, 'keyup', function(e)  { obj.Is = false; obj.even = '';  clearInterval(step);  step = '';  Step(); } )

</script>		



 </head>
 <body>
 
 </body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 04.03.2018, 00:06
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,071

-- "при удержании keypress зацикливается"
Так работает клавиатура смирись.
Если не веришь открой блокнот зажми клавишу и она будет повторятся (за исключением некоторых специальных клавиш).

-- "и не срабатывает keyup"
Срабатывает но только когда отпускается клавиша.

Снова тут поможет КЕП =).
1. Пока нажата клавиша клавиатура генерирует событие нажатия клавиши и отправляет его браузеру множество раз (т.е. эмулирует повторное нажатие).
2. keyup срабатывает только при отжатии клавиши.

В твоем коде каждый раз при возникновении события keydown происходит создание нового события setInterval которое не зависит от setInterval созданных в предыдущих keydown.

За одно нажатие могут создаваться тысячи setInterval а удаляется только последний setInterval остальные 999 продолжают пытаться выполнятся каждые 10 миллисекунд.
Это примерно 100 вызовов функции в миллисекунду что довольно много и на слабых компьютерах может появляться эффект подвисания.
Ответить с цитированием
  #3 (permalink)  
Старый 04.03.2018, 07:50
Аватар для Conus
Аспирант
Отправить личное сообщение для Conus Посмотреть профиль Найти все сообщения от Conus
 
Регистрация: 05.12.2015
Сообщений: 85

так это программа клавиатуры
первые 999 вызовов setInterval удаляются

но подсчет показывает не более двух сот вызовов до зацикливания
и даже если удалить вызовы после всех событий клава тоже ведет себя странно

- не сразу включает повтор ввода символа а через это условное переполнние

Последний раз редактировалось Conus, 04.03.2018 в 14:21.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск события при наведении Bezlepkin Общие вопросы Javascript 1 26.01.2011 20:25
Передача аргумента методу при назначении события eval Events/DOM/Window 9 11.11.2010 06:03
При нажатии и удержании мыши заменяется картинка Webroller Events/DOM/Window 9 26.05.2010 15:00
Запрет события при выполнения другова Suharik Events/DOM/Window 3 07.05.2010 15:29
Срабатывание события при подведении к краю экрана Destrifer Общие вопросы Javascript 2 08.01.2009 14:12