Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.04.2011, 16:31
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Как отделить нажатие кл. Enter в поле INPUT от нажатия Enter в выпадающем списке?
Ситуация: есть поле INPUT с обработчиком нажатия клавиш, который ловит "Enter":
inp.onkeyup = function(event)
{
event = event || window.event;
if ((event.keyCode == 0xA)||(event.keyCode == 0xD)) 
 {
 send();
 return false;
 }  
};
и это работает как надо.
Но при выпадении списка автозаполнения поля тоже можно нажать Enter и функция поймает нажатие. А это НЕ надо.
Вопрос? Как отделить эти нажатия клавиши Энтер? Ничего пока не смог придумать кроме как отменить выпадение списка:
inp.setAttribute('autocomplete','off');
Но некоторым это не понравится. Может, кто-нибудь подскажет другой вариант решения?
Ответить с цитированием
  #2 (permalink)  
Старый 17.07.2012, 06:14
Аватар для Tao309
Новичок на форуме
Отправить личное сообщение для Tao309 Посмотреть профиль Найти все сообщения от Tao309
 
Регистрация: 17.07.2012
Сообщений: 1

#search - поле инпута.

$(document).ready(function() {

$("#search").keyup(function(event) {

if(event.keyCode==13) {alert("Message!!!");}

});

});
Ответить с цитированием
  #3 (permalink)  
Старый 17.07.2012, 11:08
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Маэстро
Но при выпадении списка автозаполнения поля тоже можно нажать Enter и функция поймает нажатие.
Если не сложно - приведите код HTML данного куска
Ответить с цитированием
  #4 (permalink)  
Старый 17.07.2012, 11:19
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Маэстро,
ну можно создать переменную фильтр - если она true (список не выпал) функцию выполняется и переменная фильтр стала false и инпут уже не ловит события по закрытии списка вернуть переменной true, следующий код для примера:
<script>
document.ok = true;//переменная фильтр
document.onkeypress = function (event){//onkeypress
 event = event || window.event;
 if (document.ok == true){//если переменная фильтр true пропускаем и ловим события
  if (event.keyCode == 13){//если клавиша Enter
   alert('Фильтр прошел.');
   document.getElementById('input').style.display = 'block';//Список выпадает
   }
   document.ok = false;//пока не нажмут на скрытие списка события не будут пропускаться
  }
 else alert('Фильтрация не прошла.');
}
</script>
<input type='button' value='input' id='input' style='display:none' onclick='document.ok = true;document.getElementById("input").style.display = "none"'>

Последний раз редактировалось Dim@, 17.07.2012 в 11:22.
Ответить с цитированием
  #5 (permalink)  
Старый 17.07.2012, 11:23
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Пока писал, Dim@ опередил, идея та же - поставить флаг.
<input id="inp" value="text">

<script>
window.onload = function () {
  var inp = document.getElementById('inp');
  var flag;

  inp.onkeydown = function () {
    flag = inp.value.length;
  }

  inp.onkeyup = function(e) {
    e = e || event;
    if (e.keyCode == 13) {
      if (inp.value.length != flag) {
        return;
      } else {
        alert('отправили данные')
      }
    }
  }
}
</script>
Ответить с цитированием
  #6 (permalink)  
Старый 17.07.2012, 13:55
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Кстати, только заметил, что тема ещё с того года (по ходу некропостить входит в моду , хотя данная тема, думаю, актуальна)
Ответить с цитированием
  #7 (permalink)  
Старый 18.07.2012, 04:05
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от bes
Кстати, только заметил, что тема ещё с того года
ну обычно новички и подымают древние посты, а застоялые мигом начинают ее засыпать постами, не смотря на дату.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 18.07.2012, 09:11
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от devote
ну обычно новички и подымают древние посты, а застоялые мигом начинают ее засыпать постами, не смотря на дату.
Да, помню поначалу тоже поднимал пару старых тем (поначалу возникает мысль, что лучше не плодить тем, а присоединяться к старым), потом на одной из тем с относительным трудом (один человек и то после пару up-ов, объяснил, что не собирается перечитывать старые посты) выяснилось, что лучше создать новую тему (возникает вопрос, почему до сих пор не собраны в одном месте толковые правила по работе форума, ответ наверное - потому что так загадочней )
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как отделить нажатие символьных клавиш от функциональных? Kos Events/DOM/Window 50 03.10.2008 12:08
Разным элементам input - разное форматирование. Как? eclipse (X)HTML/CSS 1 25.10.2007 13:55