onkeydown и GET запрос

Discussion in 'PHP' started by Jekel, 7 Dec 2009.

  1. Jekel

    Jekel New Member

    Joined:
    19 Nov 2009
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    Как сделать чтобы при нажатии на 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. VDShark

    VDShark Elder - Старейшина

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

    Итак, из вышесказанного мы можем написать
    Code:
    	<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>
    
    Но опять таки, единственным адекватноотработавшим браузером является Опера. И ослик, и фуфлофокс отличились природной неадекватностью, и мы видим лавинообразное "нарастание" события. Самое простое решение - поставит флаг, говорящий что кнопка нажата, но еще не отпущена. И в итоге получим следующее:
    Code:
    	<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>
    
     
    1 person likes this.