Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разная реакция на нажатие Enter, еще один ламерский вопрос 
:(
    Опции темы
batigoal
Дата 24.2.2005, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Такая ситуация: при нажатии клавиши Enter нажимается кнопка Submit. Это уже есть, видимо, автоматически.
НО если курсор находится в некоторых текстовых полях, то необходимо организовать другую обработку, а именно - вызов функции addItem(). Какой код нужно добавить в тег <input>?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
GoodBoy
Дата 24.2.2005, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



<input onKeyPress="addItem()">
а в функции addItem() проверить был ли нажат именно Enter. Знаешь как?


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
batigoal
Дата 24.2.2005, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Напиши, плиз, а то тяжело искать, когда не знаешь, что нужно. Как-то по коду клавиши, да?

1. Но ведь тогда функция будет вызываться при каждом набранном символе. Хотя это навряд ли сильно затормозит работу smile
2. А основной Enter (связанный с Submit'ом) при этом перехватится?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
batigoal
Дата 24.2.2005, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Сейчас столкнулся с проблемой, видимо, из той же оперы (не в смысле, что я пользуюсь Opera, а в смысле, проблема в том же smile )
Я обрабатываю кнопку Reset своей функцией, она выполняется, заполняет списки, выделяет первые элементы при соблюдении определенных условий, но после нее еще почему-то все выделения сбрасываются. Видимо, это браузер сам отрабатывает reset. Наверное, то же будет и Enter'ом.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Sardar
Дата 24.2.2005, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Lamer George не используй кнопку type="reset", возьми просто type="button" smile

Либо возврати из события false. У события вызови: event.preventDefault() - для мозиллы, и event.returnValue=false - для ИЕ.

Цитата(Lamer @ 24.2.2005, 17:45)
Но ведь тогда функция будет вызываться при каждом набранном символе. Хотя это навряд ли сильно затормозит работу smile

И откуда такое убеждение что JS обязан исполнятся за микросекунды? smile Это скрипты юзеровского интерфейса, а человек существо медленное. Я еще не видел ни одного скрипта, задержку которого можно было бы увидеть. Ну кроме анимаций smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
batigoal
Дата 25.2.2005, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(Sardar @ 24.2.2005, 20:23)
не используй кнопку type="reset", возьми просто type="button"

Да уж, можно было догадаться... Спасибо.

Подскажите еще, как
Цитата(GoodBoy @ 24.2.2005, 18:19)
в функции addItem() проверить был ли нажат именно Enter




--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Aliance
Дата 25.2.2005, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Lamer George
Читай тут: http://forum.vingrad.ru/index.php?showtopic=32350
PM MAIL WWW ICQ Skype   Вверх
batigoal
Дата 28.2.2005, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Посмотрел ссылку, но с ходу разобраться так и не сумел. Я так понял, существуют разные способы обработки событий. Как заблокировать обработку Enter на всей форме, я понял. Подскажите, пожалуйста, что нужно делать в моем конкретном случае:

Код

<form>
<input type="submit" ...>    // здесь enter отлавливается автоматом
<input type="text" ... onKeyPress="return press(this);">
</form>

Скрипт:
Код

function addItem(..) {..}
function press(id)
{
/////////////////////////////////////////////////////////////////////////////////
ЗДЕСЬ НУЖНО ОПРЕДЕЛИТЬ, ЧТО БЫЛ НАЖАТ ИМЕННО ENTER
/////////////////////////////////////////////////////////////////////////////////
   if(проверка enter)
   {
       addItem();
       return false;
   }
   else return true;
}


Собственно, как "опознать" клавишу Enter?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
batigoal
Дата 28.2.2005, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Продвигаюсь, но медленно:
Код

function press(id)
{
 (event.keyCode==13)
 {
   addItem(id);
   return false;
 }
 return true;
}

Этот код делает следующее:
- вызывает addItem, когда нужно
- отправляет форму, когда ни у какого элемента нет фокуса ввода
- но не отправляет, если фокус находится у элемента, для которого не вызывается press(id).

Как сделать отправку, если фокус находится у не у текстового поля?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Aliance
Дата 28.2.2005, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Данная функция IE only. Читай как регистрировать события в топике-статье «Все о событиях»
PM MAIL WWW ICQ Skype   Вверх
batigoal
Дата 28.2.2005, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Ясно, займусь плотнее. Спасибо.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Aliance
Дата 28.2.2005, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Код

function press(id, evt) {
  evt = (evt) ?evt : ((window.event) ? window.event : null);
  var charCode = (evt.charCode) ? evt.charCode : ((evt.which) ? evt.which : evt.keyCode);
  if (evt.charCode == 13)
     addItem(id);
     return false;
     alert('Вы нажали на Enter');
  }
return true;
}


<input ... onkeydown="return press('your_id', event)">

Это сообщение отредактировал(а) Aliance - 28.2.2005, 19:33
PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 28.2.2005, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



[/оффтоп]Lamer George плюс тебе бы ставить надо только за то, что сам стараешся smile
Извиняюсь, но работы валом, каждую неделю презентация, времени хватает только форум чистить...[/оффтоп]

Похоже ловить событие тебе нужно у всего документа, а не у текстового поля, ведь без фокуса у поля нужно добавлять значение. Делать это будем для последнего поля с которым работал юзер и только если оно изменилось.
HTML
<input type="text" onKeyPress="return press(this, event)">

Код
//я не сторонник традиционных событий, писать бы addEventListener;-)
document.onkeypress=document_keypress;

var lastInput={input: null, changed: false}; //храним ссылку на последнее поле и флаг изменения
function press(inp, ev) {
 var key=window.event? window.event.keyCode:ev.keyCode; //про мозиллу и Оперу не забываем;-)
 lastInput.input=inp;  //сменяем фокус
 if(key==13) {
   if(ev.preventDefault) ev.preventDefault(); //отрубаем дефолт в мозилле/Опере
   ev.returnValue=false; //и в ИЕ
   if(ev.stopPropagation) ev.stopPropagation(); //отрубаем bubbling в Мозилле/Опере
   ev.cancelBubble=true;  //и в ИЕ
   addItem(inp); //делаем полезное
   lastInput.changed=false;  //отмени все изменения
   return false;
 } else lastInput.changed=true; //поле менялось, проверим позже на документе
 return true;
}

function document_keypress(ev) {
 var e=window.event? window.event: ev;
 //если мы не в левом брауере и Event  есть И жива ссылка на последнее поле И оно свежее
 if(e && lastInput.input && lastInput.changed) press(lastInput.input, e);
}

function addItem(inp) {
 alert(inp.value);
}


Как видишь всё просто smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
batigoal
Дата 28.2.2005, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Огромное спасибо! Сам бы не додумался, а Мозиллу мне надо обязательно учитывать.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0830 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.