2016-09-13 7 views
2

Мне нужно найти непрерывное нажатие клавиши ввода в jquery. Это возможно?Как предотвратить нажатие клавиши ввода в течение нескольких секунд с помощью jquery?

$('#password-input').keyup(function(e) { 
    if (e.which == 13) { 
     alert("Enter key") 
    } 
}); 

Вот если я нажав ENTER ключ более чем один раз, значит, я получаю уведомления в два раза. Но мне нужно получить только один раз.

Пожалуйста, помогите!

+1

, чем один раз в то же время :)) – madalinivascu

ответ

0

Используйте переменную для хранения состояния

var pressed = false; 
$('#password-input').keyup(function(e) { 
    if (!pressed) { 
     if (e.which == 13) { 
      pressed = true; 
      alert('Enter key'); 
     } 
    } 
}); 
0

Использование .setTimeout() установить задержку тревоги дисплея. В течение времени задержки, если снова нажать клавишу, удалите предыдущий таймаут и установите новый тайм-аут. В конце таймаута отобразите предупреждение.

var interval; 
 
$('#password-input').keyup(function (e) { 
 
    if (e.which == 13) { 
 
     clearInterval(interval); 
 
     interval = setTimeout(function(){ 
 
      alert("Enter key") 
 
     }, 500); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="password-input" />

Вы можете изменить время задержки к пользовательскому времени.

3

Вы можете использовать jQuery#bind связать keyup события и чем отвязать keyup событие с jQuery#unbind когда прес конечного пользователя «Введите ключ» для того, чтобы предотвратить несколько раз «Ввод ключа»:

var $passwordInput = $('#password-input'); 
 

 
$passwordInput.bind('keyup', function(e) { 
 
    passwordInputKeyupHandler(e); 
 
}); 
 

 
function passwordInputKeyupHandler(e) { 
 
    if (e.which === 13) { 
 
    console.log('Enter key!'); 
 
    $passwordInput.unbind('keyup'); 
 

 
    return setTimeout(function(){ 
 
     console.log('Rebind keyup event'); 
 
     $passwordInput.keyup(passwordInputKeyupHandler); 
 
    }, 2000); 
 
    } 
 

 
    console.log('Any other key...'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input id="password-input" type="password">

Обратите внимание, что, как указывал @dorado на комментарии было сделано «пересвязывание» через 2 секунды, используя setTimeout() для того, чтобы избежать конечного пользователя, чтобы иметь чтобы сделать перезагрузку страницы.

+2

вы также можете «перепривязывают» через несколько секунд с помощью 'setTimeout'. – dorado

+0

Я полностью согласен. Это нужно сделать, чтобы избежать того, что конечный пользователь должен выполнить перезагрузку страницы. –

+1

Я связал триггер события внутри моей функции обработчика событий. Отменяя мой «ввод» при нажатии клавиши «Ввод», вызывая вызов ajax, когда вызов ajax завершается, я перепроверка «input» на 'keyup'. Гарантирует, что вызов Ajax завершен, поэтому я не преданно перезаписываю 'keyup' (что бы победить цель сделать все это в первую очередь). –

1

Кроме использования переменной для хранения состояния, я полагаю, вы также захотите, чтобы, если прошло несколько миллисекунд, нажатие клавиши ввода снова дает вам предупреждение. Этого можно достичь с помощью setTimeout. Например, здесь ключ ввода будет повторно обнаружен, только если он нажат после интервала 2000 мс. более

var pressed = false; 
$('#input-element').keyup(function(e) { 
    if (!pressed) { 
     if (e.which == 13) { 
      pressed = true; 
      alert('Enter pressed.'); 
      i = setTimeout(function() { 
       pressed = false; 
      }, 2000); 

     } 
    } 
}); 
+0

его работа хорошая. Я трачу много времени на эту проблему. Спасибо тебе столько дорадо. –

+0

Вы можете уменьшить операторы if: 'if (! Press && e.which === 13) {...}'. а также обратите внимание, что нет необходимости присваивать 'setTimeout()' неопределенной переменной 'i' –

+0

Вы больше всего любите @GokulKumar. :) – dorado

0
var pressed = false; 
    $('#password-input').on('keyup',function(e) { 
     if (e.which == 13 && !pressed) { 
      pressed = true; 
      alert("Enter key"); 
     } 
    }); 
+1

Пожалуйста, отредактируйте с дополнительной информацией. Только код и «попробуйте» ответы не приветствуются, поскольку они не содержат содержимого, доступного для поиска, и не объясняют, почему кто-то должен «попробовать это». – abarisone