ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

onkeydown и GET запрос
  #1  
Старый 07.12.2009, 02:58
Аватар для Jekel
Jekel
Новичок
Регистрация: 19.11.2009
Сообщений: 8
Провел на форуме:
8708

Репутация: 0
Question onkeydown и GET запрос

Как сделать чтобы при нажатии на Enter запрос посылался безпрерывно до того момента пока клавишу не отпустят? т.е Нажал и держишь клавишу - отправка запроса происходит безпрерывно...ну раз в пол-секунды можно..Пожалуйста помогите

Вот сейчас так выглядит функция отправки запроса:

Код HTML:
document.onkeydown = function keyIsDown() {
    if (event.keyCode == 13) {
    xmlHttp.open("GET", "controls.php?keyEnter=1", true);  
    xmlHttp.onreadystatechange = readData;
    xmlHttp.send(null);
  }
};

и почему этот код (нажатие клавишы) не работает в FF и IE ???
 
Ответить с цитированием

  #2  
Старый 09.12.2009, 03:49
Аватар для VDShark
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме:
804931

Репутация: 526
По умолчанию

Цитата:
Сообщение от Jekel  
Как сделать чтобы при нажатии на Enter запрос посылался безпрерывно до того момента пока клавишу не отпустят? т.е Нажал и держишь клавишу - отправка запроса происходит безпрерывно...ну раз в пол-секунды можно..Пожалуйста помогите

Вот сейчас так выглядит функция отправки запроса:

Код HTML:
document.onkeydown = function keyIsDown() {
    if (event.keyCode == 13) {
    xmlHttp.open("GET", "controls.php?keyEnter=1", true);  
    xmlHttp.onreadystatechange = readData;
    xmlHttp.send(null);
  }
};

и почему этот код (нажатие клавишы) не работает в FF и IE ???
Не работает из за нескольких причин.
1) Мелкософт как всегда идут своим путем. Во всех более ли менее адекватных браузерах объект сбытия передается в функцию как аргумент event (где то скрытым, где то первым). В IE же создается поле у корневого элемента DOM (window).
Т.е. что бы решить эту проблему необходимо сделать следующий маневр ушами
Код:
if(!event) event = window.event;
И дальше спокойно работать с event'ом.
2) Код клавиши в некоторых браузерах зранится в свойстве объекта event под именем which (а не keyCode). Решить можно аналогично первому

Итак, из вышесказанного мы можем написать
Код:
	<script type="text/javascript">
		var interval;
		
		document.onkeydown = function(event)
		{
			if(!event) event = window.event;
			var key = event.which ? event.which : event.keyCode;
			if(key == 13)
			{
				interval = setInterval("foo()", 500);
			}
		}
		
		document.onkeyup = function()
		{
			clearInterval(interval);
		}
		
		function foo()
		{
			//код твоей функции
		}
	</script>
Но опять таки, единственным адекватноотработавшим браузером является Опера. И ослик, и фуфлофокс отличились природной неадекватностью, и мы видим лавинообразное "нарастание" события. Самое простое решение - поставит флаг, говорящий что кнопка нажата, но еще не отпущена. И в итоге получим следующее:
Код:
	<script type="text/javascript">
		var interval;
		var flag = false;
		
		document.onkeydown = function(event)
		{
			if(!event) event = window.event;
			var key = event.which ? event.which : event.keyCode;
			if(key == 13 & !flag)
			{
				flag = true;
				interval = setInterval("foo()", 500);
			}
		}
		
		document.onkeyup = function()
		{
			clearInterval(interval);
			flag = false;
		}
		
		function foo()
		{
			//код твоей функции
		}
	</script>
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Баги приложения "Счастливый фермер" (Продолжение №2) regau Социальные сети 2290 04.09.2009 17:14
Посимвольный перебор в базах данных на примере MySQL LoFFi Чужие Статьи 5 30.04.2007 05:05
Коды состояния HTTP - Коды ошибок http сервера D=P=CH= MOD= *nix 6 15.10.2006 20:47



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ