Как отделить нажатие кл. 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');
Но некоторым это не понравится. Может, кто-нибудь подскажет другой вариант решения? |
#search - поле инпута.
$(document).ready(function() { $("#search").keyup(function(event) { if(event.keyCode==13) {alert("Message!!!");} }); }); |
Цитата:
|
Маэстро,
ну можно создать переменную фильтр - если она 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@ опередил, идея та же - поставить флаг.
<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>
|
Кстати, только заметил, что тема ещё с того года (по ходу некропостить входит в моду :), хотя данная тема, думаю, актуальна)
|
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 01:50. |