Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ловля клавиш с помощью window.onkeypress (https://javascript.ru/forum/misc/5465-lovlya-klavish-s-pomoshhyu-window-onkeypress.html)

Joy301185 16.10.2009 22:37

Ловля клавиш с помощью window.onkeypress
 
Доброго времени. Вот уже два дня пытаюсь решить свою проблему и никак не получается. Уже мозги себе полностью прогуглил.
Задача следующая. Нужно написать функцию которая будет проводить некоторые манипуляции при нажатии ENTER в поле формы. Тоесть выполняться только когда курсор находиться в форме. Функция должна находиться в внешнем файле. Сам начал постигать азы JS недавно, так что не ругайте если что не так.
Нашел следующее:
window.onkeypress = pressed;
function pressed(e) 
{
	key = e.keyCode || e.which;
	if(key == 13)
//например выводим Хеллов
	alert("Hello");
}

Работает но, во-первых функция стартует сама без объявления onload="pressed(e)" в файле где она выполняется, во-вторых срабатывает в любом месте, даже когда требуемаю форма не в фокусе. Я так понимаю что в форме надо написать что-то типа <input type="text" onFocus="pressed(e)"...>, но вот как именно сделать мозгов пока не хватает. И еще если не сложно объясните за что отвечает параметр (е) в данной функции и зачем он вообще нужен.
Заранее благодарен всем кто хоть чем-то поможет.

x-yuri 17.10.2009 03:09

какие манипуляции и почему курсор должен находиться в пределах формы?

micscr 17.10.2009 09:10

1) Писать document.form1.onkeypress= (form1 изменить на свое имя формы)
2) Как она сама стартует не пойму - только по событию должна.
3) e - ссылка на объект события лучше создавать e = e || window.event;
4) При нажатии Enter в поле ввода формы идет сабмит - учитывать.
5) На этом сайте есть статья по событиям - читать рекомендую.

Joy301185 17.10.2009 13:21

Курсор не обязательно должен находиться в пределах формы, главное чтобы нажатие ЕНТЕР отлавливало только когда форма в фокусе, а не по всей страничке.
Вчера получилось сделать так:
function rebuild()
{
document.onkeydown = function(e) {
    e = e || window.event;
    if (e.keyCode == 13) {
      alert("Hello");
      }
	  return true;
   }
}


Уверен что коряво, но работает. А в форме указал onfocus="rebuild()".
Но теперь когда форма теряет фокус всеравно продолжает писать Hello. Было бы неплохо сделать чтобы форма сразу после загрузки странички была уже в фокусе.
Напишу для чего это все задумано. Хочу сделать компактную форму для авторизации. Тоисть с одним полем ввода. Сначала просит ввести логин, после нажатия ентер происходит событие, а точнее форма для ввода логина меняется на форму для ввода пароля. Происходит ввод пароля, снова ентер и логин с паролем идут дальше для обработки в php или выводим ошибку. Знакомый программер на Pyton говорит что зря мозги себе парю, типа сделай как обычно два поля для логина и пасса и все. Но хочется сделать именно так, чтобы было компактно и красиво, как при входе в KDE.

micscr 17.10.2009 13:41

Лучше тогда уже на php последовательно
выдавать поля после перезагрузки.
Не забывайте - скрипты отключают.

Joy301185 17.10.2009 13:43

что отключают это конечно верно :(, да вот хотелось бы сделать форму которая не будет моргать

x-yuri 17.10.2009 22:08

Цитата:

Сообщение от Joy301185
Знакомый программер на Pyton говорит что зря мозги себе парю, типа сделай как обычно два поля для логина и пасса и все.

а он дело говорит ;) Исключением является лишь тот, случай, когда сайт будут посещать только пользователи KDE

Paguo-86PK 18.10.2009 07:53

Интересно, я тоже пытался другу помочь и сделал "умную" форму:
<table border=1>
<tr><td>E-Mail</td><td><input type=edit onblur="
show = this.value ? 'block' : 'none';
pass = document.getElementById('passrow').style;
last = pass.display == 'none';
pass.display = show;
if(last) setTimeout(function() {
 document.getElementById('password').focus();
}, 1);
"/></td></tr>
<tr id="passrow" style="display:none"><td>Password</td><td><input id="password" type="edit"/></td></tr>
</table>
Поле пароля невидимо до тех пор, пока в логин не введётся хотя бы один символ и поле логина не потеряет фокус для перехода к паролю:)
Работает в IE, в Opera - таблица глючно отображается. Не знаю почему...

Kolyaj 18.10.2009 10:58

Цитата:

Сообщение от Paguo-86PK
сделал "умную" форму

Это глупая форма. Вы предлагаете кликать в любом месте экрана, чтобы наконец поле пароля появилось? В чем вообще смысл такой логики?

Цитата:

Сообщение от Paguo-86PK
input type=edit

У input нет типа edit.

Paguo-86PK 18.10.2009 19:33

Что ж не внимательные такие?
 
Цитата:

Сообщение от Kolyaj (Сообщение 32649)
Это глупая форма. Вы предлагаете кликать в любом месте экрана, чтобы наконец поле пароля появилось? В чем вообще смысл такой логики?

Вовсе нет. Вводишь э-мэйл, жмёшь таб, появляется поле ввода пароля и фокус переходит туда, вводишь пароль...

Внимательным надо быть, сударь;)
Цитата:

Сообщение от Kolyaj (Сообщение 32649)
У input нет типа edit.

Помните, у Леонардо Давинчи почти все чертежи имеют ошибку. Защита от дурака+копилефт...:lol:


Часовой пояс GMT +3, время: 03:59.