HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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

Репутация: 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
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
С нами: 10143686

Репутация: 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



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


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




ANTICHAT ™ © 2001- Antichat Kft.