2013-08-29 6 views
0

ли видеть кого-то в этом jsfiddleНе получая KeyDown прерывания

Почему я не получаю прерывать KeyDown? Я получаю прерывание щелчка в оранжевом поле, но без прерывания, если я нажму в поле бежевого цвета, а затем нажмите клавишу.

Благодаря

$(function() { 
    $('#beigeBox').keydown(function(e) {       
      console.log("In keydown handler"); 
      if(e.keyCode == 68) { // 'D' 
       console.log("Got 68"); 
      } 
    }); 

    $('#orangeBox').click(function() {      
      console.log("orangeBox clicked"); 
    }); 

}); 

ответ

2

Ваш beigeBox DIV не contenteditable, поэтому никаких keydown событий не может быть зарегистрирован на нем. Ваш #orangeBoxdiv, с другой стороны, содержит обработчик click, который регистрируется (с div можно щелкнуть).

Вот демо, где ваш beigeBox зарегистрирует keydown, так как contenteditable включена: http://jsfiddle.net/tymeJV/36Tfx/3/

+0

Хммм. Хорошо, хорошо! Однако в реальном приложении у меня есть флажок, который вы можете щелкнуть, чтобы дублировать div. То, что я пытаюсь сделать здесь, это создать для него комбинацию клавиш Ctrl-D. Но дубликат, который нужно дублировать, не обязательно доступен для контента, и я не хочу заставить пользователя щелкнуть в определенном месте до того, как Ctrl-D будет работать. Так есть способ ощутить Ctrl-D независимо от того, где находится мышь? (Это может быть преобразование в новый вопрос.) – Steve

+1

@Steve - вы можете сделать '$ (document) .on ('keydown', function (e) {// проверить e.which для ключа});' to уловить нажатие клавиш. Вам нужно будет найти коды клавиш tho. Может быть, плохая идея, выполняющая функцию каждый раз, когда пользователь нажимает клавишу tho. – tymeJV

+0

Спасибо! Это работает. Ну, не совсем. По-прежнему существует проблема с другими приложениями, которые сначала получают Ctrl-D, но я задал этот вопрос в новом StackOverflow по адресу http://stackoverflow.com/questions/18522385/how-to-get-first-pick-at-keydown. – Steve

0

Попробуйте JSfiddle

Код:

$(function() { 

    $('#beigeBox').keypress(function(event) { 

     alert("In keydown handler");  

     if (event.which == 68) { 

      event.preventDefault(); 
      alert("Got 68"); 
     }     
    }); 

    $('#orangeBox').click(function() { 

     alert("orangeBox clicked"); 

    });