Остановить событие нажатия клавиши
Как остановить событие нажатия клавиши при нажатии клавиши.
У меня есть обработчик keydown в том, что мне нужно остановить событие нажатия клавиши.
На самом деле у меня есть форма и текстовое поле.
whn пользователь нажимает клавишу "enter", keydown я запускает событие и имеет обработчик.
form submit запускается нажатием клавиши, поэтому мне нужно остановить событие нажатия клавиши в моем обработчике keydown.
Ответы
Ответ 1
function onKeyDown(event) {
event.preventDefault();
}
http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-Event-preventDefault
или
function onsubmit(event) {
return false;
}
return false, чтобы остановить распространение событий
Ответ 2
В opera вам нужно использовать событие keypress
, чтобы предотвратить действия по умолчанию для событий клавиатуры. keydown
работает, чтобы предотвратить действие по умолчанию во всех браузерах, но не в операторе.
См. этот длинный список несоответствий при обработке клавиатуры в браузерах.
Ответ 3
Попробуйте event.cancelBubble = true
в обработчике событий.
Ответ 4
Запись
<script type="text/javascript">
function keyDn(obj)
{
if(window["event"]["keyCode"]==48) // key 0 will disabled keyPress event
{
obj["onkeypress"]=null;
}
}
function keyPs(obj)
{
alert("Keypress");
}
</script>
<form id="form1" runat="server">
<div>
<input type="text" onkeydown="keyDn(this)" onkeypress="keyPs(this)" />
</div>
</form>
в обработчике keydown.
Ответ 5
Мне удалось получить event.preventDefault(); работать в Safari и Firefox, но не IE7 или IE8.
Если вы хотите только отключить ключ ввода, убедитесь, что вы также проверяете значение ключа (13 для ввода) и устанавливаете для этого ключа значение event.preventDefault().
Любой, кто может найти ответ для IE7/8 или Opera?
Ответ 6
Здесь я остановил событие пузырька для кнопок вверх/вниз/влево/вправо:
$(document).on("keydown", function(e) {
if(e.keyCode >= 37 && e.keyCode <= 40) {
e.stopImmediatePropagation();
return;
}
});
Я также попробовал e.preventDefault или event.cancelBubble = true из ответов выше, но они не повлияли.