Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.10.2012, 09:46
Аватар для antserg
Аспирант
Отправить личное сообщение для antserg Посмотреть профиль Найти все сообщения от antserg
 
Регистрация: 14.05.2011
Сообщений: 61

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

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


Все классно, работает. Отлично.
Теперь нужно, чтобы события нажатия на клавиши вверх/вних заработали. Подскажите, пожалуйста, как это можно сделать?
Ответить с цитированием
  #2 (permalink)  
Старый 20.10.2012, 13:49
Профессор
Отправить личное сообщение для Hoshinokoe Посмотреть профиль Найти все сообщения от Hoshinokoe
 
Регистрация: 08.01.2012
Сообщений: 253

antserg,
Сообщение от antserg
Теперь нужно, чтобы события нажатия на клавиши вверх/вних заработали. Подскажите, пожалуйста, как это можно сделать?
Убрать e.preventDefault();
Ответить с цитированием
  #3 (permalink)  
Старый 20.10.2012, 14:54
Аватар для antserg
Аспирант
Отправить личное сообщение для antserg Посмотреть профиль Найти все сообщения от antserg
 
Регистрация: 14.05.2011
Сообщений: 61

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

Отлично, все работает как нужно. Клавиши вниз/вверх не работают. Теперь при клике по картинке с id=img2 мне нужно, чтобы клавиши вниз/вверх снова заработали, то есть в моем случае отменить preventDefault(). Как это можно сделать? Как можно убрать e.preventDefault()?
Ответить с цитированием
  #4 (permalink)  
Старый 20.10.2012, 15:35
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

Убрать обработчик же!
Ответить с цитированием
  #5 (permalink)  
Старый 20.10.2012, 15:55
Аватар для antserg
Аспирант
Отправить личное сообщение для antserg Посмотреть профиль Найти все сообщения от antserg
 
Регистрация: 14.05.2011
Сообщений: 61

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

Если я вначале кликну по картинке с id=img1, а затем кликну по картинке с id=img2, то экран все равно будет желтым? То же самое с e.preventDefault()... Я отключил клавиши вниз/вверх на первой картинке, почему они должны заработать при клике по второй картинке?
Ответить с цитированием
  #6 (permalink)  
Старый 22.10.2012, 14:03
Профессор
Отправить личное сообщение для Hoshinokoe Посмотреть профиль Найти все сообщения от Hoshinokoe
 
Регистрация: 08.01.2012
Сообщений: 253

antserg,
Сообщение от antserg
Если я вначале кликну по картинке с id=img1, а затем кликну по картинке с id=img2, то экран все равно будет желтым? То же самое с e.preventDefault()... Я отключил клавиши вниз/вверх на первой картинке, почему они должны заработать при клике по второй картинке?
Совершенно разные вещи. Body - глобальный объект, у которого ты изменяешь свойство. А событие при каждом клике генерируется совершенно новое, поэтому если ты не делаешь preventDefault, то оно не отменяется.
Ответить с цитированием
  #7 (permalink)  
Старый 22.10.2012, 14:32
Профессор
Отправить личное сообщение для Hoshinokoe Посмотреть профиль Найти все сообщения от Hoshinokoe
 
Регистрация: 08.01.2012
Сообщений: 253

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;
});
...
Ответить с цитированием
  #8 (permalink)  
Старый 22.10.2012, 22:20
Аватар для antserg
Аспирант
Отправить личное сообщение для antserg Посмотреть профиль Найти все сообщения от antserg
 
Регистрация: 14.05.2011
Сообщений: 61

Hoshinokoe,
Ясно, логику я понял, спасибо за помощь
Ответить с цитированием
  #9 (permalink)  
Старый 13.05.2016, 14:27
Новичок на форуме
Отправить личное сообщение для shifter Посмотреть профиль Найти все сообщения от shifter
 
Регистрация: 12.11.2014
Сообщений: 5

Сообщение от Hoshinokoe Посмотреть сообщение
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;
});
...
спасибо
Ответить с цитированием
  #10 (permalink)  
Старый 13.06.2017, 19:19
Кандидат Javascript-наук
Отправить личное сообщение для dpts Посмотреть профиль Найти все сообщения от dpts
 
Регистрация: 12.05.2015
Сообщений: 111

У меня немного другая ситуация.
Есть форма:
<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, как это можно сделать?
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
События клавиатуры. Александр х@к Элементы интерфейса 5 08.07.2012 23:09
Обработчик события нажатия на клавишу meryfelow Events/DOM/Window 4 04.05.2012 16:15
Дебаг js, или как найти обработчик события для тега jimm88 Events/DOM/Window 1 18.04.2012 15:11