Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как отделить нажатие кл. Enter в поле INPUT от нажатия Enter в выпадающем списке? (https://javascript.ru/forum/events/16770-kak-otdelit-nazhatie-kl-enter-v-pole-input-ot-nazhatiya-enter-v-vypadayushhem-spiske.html)

Маэстро 21.04.2011 16:31

Как отделить нажатие кл. 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');
Но некоторым это не понравится. Может, кто-нибудь подскажет другой вариант решения?

Tao309 17.07.2012 06:14

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

$(document).ready(function() {

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

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

});

});

Deff 17.07.2012 11:08

Цитата:

Сообщение от Маэстро
Но при выпадении списка автозаполнения поля тоже можно нажать Enter и функция поймает нажатие.

Если не сложно - приведите код HTML данного куска

Dim@ 17.07.2012 11:19

Маэстро,
ну можно создать переменную фильтр - если она 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"'>

bes 17.07.2012 11:23

Пока писал, 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>

bes 17.07.2012 13:55

Кстати, только заметил, что тема ещё с того года (по ходу некропостить входит в моду :), хотя данная тема, думаю, актуальна)

devote 18.07.2012 04:05

Цитата:

Сообщение от bes
Кстати, только заметил, что тема ещё с того года

ну обычно новички и подымают древние посты, а застоялые мигом начинают ее засыпать постами, не смотря на дату.

bes 18.07.2012 09:11

Цитата:

Сообщение от devote
ну обычно новички и подымают древние посты, а застоялые мигом начинают ее засыпать постами, не смотря на дату.

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


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