2016-04-06 3 views
0

У меня проблема. Я хочу остановить событие нажатия клавиши при нажатии на пробел, затем я хочу что-то сделать, и, наконец, мне нужно «перезапустить» эту функцию. Это возможно? Как я могу это сделать?Запуск/остановка события нажатия jQuery

Спасибо заранее

$(document).keypress(function(e) { 
    if(e.keyCode == 32) 
      // stop keypress function 
      // do something 
      // restart keypress function 
} 

ответ

0

Я считаю, что у вас есть два выбора.

Отключить обработчик:

$(document).on('keypress', function keypressHandler(e) { 
    //disable handler 
    $(document).off('keypress'); 

    //do stuff 

    //enable keypress handler 
    $(document).on('keypress', keypressHandler);  
}); 

Используйте флаг:

var keyHandlerActive = true; 
$(document).on('keypress', function(e) { 
    if (!keyHandlerActive) { return; } 
    keyHandlerActive = false; 

    //do stuff 

    keyHandlerActive = true;  
}); 
+0

Спасибо, я использую первый метод, и он работает очень хорошо. –

0

Попробуйте один из этих функций:

e.stopPropagation(); 

ИЛИ

e.preventDefault(); 

Полный код:

$(document).keypress(function(e) { 
    if (e.keyCode == 32) { 
    e.preventDefault(); // e.stopPropagation(); 
    } 
}) 
0

Ну, вы можете играть с ним, как это, как я добавил две кнопки для обеих ситуаций и по умолчанию пространстве будет быть отключенным. Проверьте это, пожалуйста:

HTML

<input id="myinput" type="text"> 
<input id="space_flag" type="hidden" value="0"> 
<br/> 
<input id="enable_space" type="button" value="Enable Space"> 
<br/> 
<input id="disable_space" type="button" value="Disable Space"> 

Jquery

$(function(){ 
    $("#myinput").keypress(function(event){   
     if(event.keyCode == 32 && $("#space_flag").val()==0){ 
      return false;   
     } 
    }); 

    $("#enable_space").click(function(event){ 
     $("#space_flag").val(1); 
    }); 

    $("#disable_space").click(function(event){ 
     $("#space_flag").val(0); 
    }); 
}); 

Рабочий пример http://jsfiddle.net/1pn4cLak/

0

Ваше выключают состояние пространства, но поворачиваясь при условии не является поэтому я использую таймер ниже .. измените его, как вам нравится

Чтобы попробовать демо,

  1. Тип любую клавишу, кроме пространства, чтобы увидеть его нужно регистрироваться
  2. Нажмите пробел, чтобы отключить в течение 10 секунд (или изменить код, чтобы сделать его до процесса полного)
  3. функции включается после 10 секунд

функция просто выключает (логического выключения в затруднительном/перепривязывает может стать болью, если злоупотребляет) в течение 10 секунд при нажатии пробела.

var logicalOff = false; 
 
$(document).keypress(function(e) { 
 
    if (logicalOff) { return true; } //well we just ignore and return until turned On 
 
    $('div').text(e.which); 
 
    if(e.which == 32) { 
 
     logicalOff = true; // stop keypress function 
 
     setTimeout(function() { // restart keypress function 
 
     logicalOff = false; 
 
     $('div').text("turned on now"); 
 
     }, 10000);   
 
     $('div').text("turned off for 10 seconds"); 
 
    }  
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div></div>