Просмотр полной версии : onkeydown и GET запрос
Как сделать чтобы при нажатии на Enter запрос посылался безпрерывно до того момента пока клавишу не отпустят? т.е Нажал и держишь клавишу - отправка запроса происходит безпрерывно...ну раз в пол-секунды можно..Пожалуйста помогите
Вот сейчас так выглядит функция отправки запроса:
document.onkeydown = function keyIsDown() {
if (event.keyCode == 13) {
xmlHttp.open("GET", "controls.php?keyEnter=1", true);
xmlHttp.onreadystatechange = readData;
xmlHttp.send(null);
}
};
и почему этот код (нажатие клавишы) не работает в FF и IE ???
Как сделать чтобы при нажатии на Enter запрос посылался безпрерывно до того момента пока клавишу не отпустят? т.е Нажал и держишь клавишу - отправка запроса происходит безпрерывно...ну раз в пол-секунды можно..Пожалуйста помогите
Вот сейчас так выглядит функция отправки запроса:
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>
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot