Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Отмена .preventDefault() или возобновление события нажатия на клавишу клавиатуры (https://javascript.ru/forum/jquery/32544-otmena-preventdefault-ili-vozobnovlenie-sobytiya-nazhatiya-na-klavishu-klaviatury.html)

antserg 20.10.2012 09:46

Отмена .preventDefault() или возобновление события нажатия на клавишу клавиатуры
 
Здравствуйте.

Нужно отменить событие Нажатие на клавиши клавиатуры вверх/вниз. Пишу:
$(document).keypress(function(e){
  if(e.keyCode==40 || e.keyCode==38){
    e.preventDefault();
  }
});


Все классно, работает. Отлично.
Теперь нужно, чтобы события нажатия на клавиши вверх/вних заработали. Подскажите, пожалуйста, как это можно сделать?

Hoshinokoe 20.10.2012 13:49

antserg,
Цитата:

Сообщение от antserg
Теперь нужно, чтобы события нажатия на клавиши вверх/вних заработали. Подскажите, пожалуйста, как это можно сделать?

Убрать e.preventDefault();

antserg 20.10.2012 14:54

Hoshinokoe,
Есть какое-то событие, допустим, клик по картинке с id=img1. Нужно запретить прокрутку документа с помощью клавиш вниз/вверх. Я пишу:
...
$(document).keypress(function(e){
  if(e.keyCode==40 || e.keyCode==38){
    e.preventDefault();
  }
});
...

Отлично, все работает как нужно. Клавиши вниз/вверх не работают. Теперь при клике по картинке с id=img2 мне нужно, чтобы клавиши вниз/вверх снова заработали, то есть в моем случае отменить preventDefault(). Как это можно сделать? Как можно убрать e.preventDefault()?

BallsShaped 20.10.2012 15:35

Убрать обработчик же!

antserg 20.10.2012 15:55

BallsShaped,
Так его и так нет при клике по второй картинке... Мы "отключили" клавиши вниз/вверх при клике по первой картинке. Если при клике по второй картинке НЕ указать e.preventDefault(), то от этого они не включатся снова. Например:
$('#img1').click(function(){
  $(body).css('color','#ff0');
});
$('#img2').click(function(){
  // здесь нет кода
});

Если я вначале кликну по картинке с id=img1, а затем кликну по картинке с id=img2, то экран все равно будет желтым? То же самое с e.preventDefault()... Я отключил клавиши вниз/вверх на первой картинке, почему они должны заработать при клике по второй картинке?

Hoshinokoe 22.10.2012 14:03

antserg,
Цитата:

Сообщение от antserg
Если я вначале кликну по картинке с id=img1, а затем кликну по картинке с id=img2, то экран все равно будет желтым? То же самое с e.preventDefault()... Я отключил клавиши вниз/вверх на первой картинке, почему они должны заработать при клике по второй картинке?

Совершенно разные вещи. Body - глобальный объект, у которого ты изменяешь свойство. А событие при каждом клике генерируется совершенно новое, поэтому если ты не делаешь preventDefault, то оно не отменяется.

Hoshinokoe 22.10.2012 14:32

antserg,

Как вариант можешь сделать так:
...
window.preventAction = true;
$(document).keypress(function(e){
  if(e.keyCode==40 || e.keyCode==38){
    if (window.preventAction) e.preventDefault();
  }
});

$('#img2').click(function(e){
   window.preventAction = false;
});
...

antserg 22.10.2012 22:20

Hoshinokoe,
Ясно, логику я понял, спасибо за помощь

shifter 13.05.2016 14:27

Цитата:

Сообщение от Hoshinokoe (Сообщение 211623)
antserg,

Как вариант можешь сделать так:
...
window.preventAction = true;
$(document).keypress(function(e){
  if(e.keyCode==40 || e.keyCode==38){
    if (window.preventAction) e.preventDefault();
  }
});

$('#img2').click(function(e){
   window.preventAction = false;
});
...

:victory: спасибо

dpts 13.06.2017 19:19

У меня немного другая ситуация.
Есть форма:
<form id="form" method="POST" enctype="multipart/form-data">
			  <input id="phnum" type="text" name="phone" class="form-control square dark" required="required" placeholder="Телефон"><span id="sendBtn" class="send-btn"><i class="fa fa-arrow-right" aria-hidden="true"></i></span>
				<div id="sendedOk" class="alert alert-success hidden">
					<h4>Запрос отправлен</h4>
				</div>
			</form>

изначально отключаем отправку формы по Enter
$(document).ready(function() {
      $("#form").keydown(function(event){
        if(event.keyCode == 13) {
          event.preventDefault();
          return false;
      }
   });
});

На поле ввода установлена маска ввода плагином,
когда телефон введен корректно (согласно маске) показываем кнопку отправки телефона:
$(document).ready(function(){
  $("#phnum").inputmask("7(999)999-99-99",{ "oncomplete": function(){
	  $("#sendBtn").css("display","block"); 

ВОТ ЗДЕСЬ БЫ ВЕРНУТЬ ОТПРАВКУ ПО ENTER

	} 
  });
});

И когда показали кнопку отправки, вернуть бы отправку по клавише ENTER, как это можно сделать?


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