Ловля клавиш с помощью 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)"...>, но вот как именно сделать мозгов пока не хватает. И еще если не сложно объясните за что отвечает параметр (е) в данной функции и зачем он вообще нужен. Заранее благодарен всем кто хоть чем-то поможет. |
какие манипуляции и почему курсор должен находиться в пределах формы?
|
1) Писать document.form1.onkeypress= (form1 изменить на свое имя формы)
2) Как она сама стартует не пойму - только по событию должна. 3) e - ссылка на объект события лучше создавать e = e || window.event; 4) При нажатии Enter в поле ввода формы идет сабмит - учитывать. 5) На этом сайте есть статья по событиям - читать рекомендую. |
Курсор не обязательно должен находиться в пределах формы, главное чтобы нажатие ЕНТЕР отлавливало только когда форма в фокусе, а не по всей страничке.
Вчера получилось сделать так: function rebuild() { document.onkeydown = function(e) { e = e || window.event; if (e.keyCode == 13) { alert("Hello"); } return true; } } Уверен что коряво, но работает. А в форме указал onfocus="rebuild()". Но теперь когда форма теряет фокус всеравно продолжает писать Hello. Было бы неплохо сделать чтобы форма сразу после загрузки странички была уже в фокусе. Напишу для чего это все задумано. Хочу сделать компактную форму для авторизации. Тоисть с одним полем ввода. Сначала просит ввести логин, после нажатия ентер происходит событие, а точнее форма для ввода логина меняется на форму для ввода пароля. Происходит ввод пароля, снова ентер и логин с паролем идут дальше для обработки в php или выводим ошибку. Знакомый программер на Pyton говорит что зря мозги себе парю, типа сделай как обычно два поля для логина и пасса и все. Но хочется сделать именно так, чтобы было компактно и красиво, как при входе в KDE. |
Лучше тогда уже на php последовательно
выдавать поля после перезагрузки. Не забывайте - скрипты отключают. |
что отключают это конечно верно :(, да вот хотелось бы сделать форму которая не будет моргать
|
Цитата:
|
Интересно, я тоже пытался другу помочь и сделал "умную" форму:
<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 - таблица глючно отображается. Не знаю почему... |
Цитата:
Цитата:
|
Что ж не внимательные такие?
Цитата:
Внимательным надо быть, сударь;) Цитата:
|
Часовой пояс GMT +3, время: 03:59. |