Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.10.2009, 22:37
Новичок на форуме
Отправить личное сообщение для Joy301185 Посмотреть профиль Найти все сообщения от Joy301185
 
Регистрация: 16.10.2009
Сообщений: 4

Ловля клавиш с помощью 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)"...>, но вот как именно сделать мозгов пока не хватает. И еще если не сложно объясните за что отвечает параметр (е) в данной функции и зачем он вообще нужен.
Заранее благодарен всем кто хоть чем-то поможет.

Последний раз редактировалось Octane, 18.10.2009 в 15:00. Причина: используйте теги [html] и [js] для оформления кода
Ответить с цитированием
  #2 (permalink)  
Старый 17.10.2009, 03:09
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

какие манипуляции и почему курсор должен находиться в пределах формы?
Ответить с цитированием
  #3 (permalink)  
Старый 17.10.2009, 09:10
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,577

1) Писать document.form1.onkeypress= (form1 изменить на свое имя формы)
2) Как она сама стартует не пойму - только по событию должна.
3) e - ссылка на объект события лучше создавать e = e || window.event;
4) При нажатии Enter в поле ввода формы идет сабмит - учитывать.
5) На этом сайте есть статья по событиям - читать рекомендую.
Ответить с цитированием
  #4 (permalink)  
Старый 17.10.2009, 13:21
Новичок на форуме
Отправить личное сообщение для Joy301185 Посмотреть профиль Найти все сообщения от Joy301185
 
Регистрация: 16.10.2009
Сообщений: 4

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


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

Последний раз редактировалось Octane, 18.10.2009 в 15:01. Причина: используйте теги [html] и [js] для оформления кода
Ответить с цитированием
  #5 (permalink)  
Старый 17.10.2009, 13:41
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,577

Лучше тогда уже на php последовательно
выдавать поля после перезагрузки.
Не забывайте - скрипты отключают.
Ответить с цитированием
  #6 (permalink)  
Старый 17.10.2009, 13:43
Новичок на форуме
Отправить личное сообщение для Joy301185 Посмотреть профиль Найти все сообщения от Joy301185
 
Регистрация: 16.10.2009
Сообщений: 4

что отключают это конечно верно , да вот хотелось бы сделать форму которая не будет моргать
Ответить с цитированием
  #7 (permalink)  
Старый 17.10.2009, 22:08
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Joy301185
Знакомый программер на Pyton говорит что зря мозги себе парю, типа сделай как обычно два поля для логина и пасса и все.
а он дело говорит Исключением является лишь тот, случай, когда сайт будут посещать только пользователи KDE
Ответить с цитированием
  #8 (permalink)  
Старый 18.10.2009, 07:53
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

Интересно, я тоже пытался другу помочь и сделал "умную" форму:
<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 - таблица глючно отображается. Не знаю почему...

Последний раз редактировалось Paguo-86PK, 18.10.2009 в 08:11.
Ответить с цитированием
  #9 (permalink)  
Старый 18.10.2009, 10:58
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

Сообщение от Paguo-86PK
input type=edit
У input нет типа edit.
Ответить с цитированием
  #10 (permalink)  
Старый 18.10.2009, 19:33
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

Что ж не внимательные такие?
Сообщение от Kolyaj Посмотреть сообщение
Это глупая форма. Вы предлагаете кликать в любом месте экрана, чтобы наконец поле пароля появилось? В чем вообще смысл такой логики?
Вовсе нет. Вводишь э-мэйл, жмёшь таб, появляется поле ввода пароля и фокус переходит туда, вводишь пароль...

Внимательным надо быть, сударь
Сообщение от Kolyaj Посмотреть сообщение
У input нет типа edit.
Помните, у Леонардо Давинчи почти все чертежи имеют ошибку. Защита от дурака+копилефт...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск