jQuery .keydown (), .keyup () игнорируя "I", "B" - PullRequest
0 голосов
/ 28 августа 2011

У меня есть немного кода здесь, который хорошо работает в веб-превью TextMate, но Safari делает то, что я не знаю, как обойти ...

$(document).ready(function(){

  $('*[contentEditable="true"]').focusin(function(){
    var _self = this;
    var isCtrl = false;
    // Bind events.
    $(window).keyup( function(e) {
      if(e.which==17 || e.which == 91) isCtrl=false;
    });
    $(window).keydown( function(e){
      if(e.which==17 || e.which == 91) isCtrl=true;
      if(isCtrl) {
        console.log(e.which);
        switch(e.which) {
          case 66:  doCommand('bold');
                    break;
          case 67:  doCommand('cut');    
                    break;
          case 73:  doCommand('italic'); 
                    break;
          case 86:  doCommand('paste');  
                    break;
          default:  break;
        }
        return false;
      }
    });
  }).focusout(function(){
    $(window).unbind();
  });
});

Когда *Нажмите 1004 * или command + i, мы должны получить событие, чтобы сделать текст курсивом в области contentEditable.Проблема в том, что в то время как другие стандартные символы ASCII / Alpha будут срабатывать, B, а я нет.Теперь, если я preventDefault(), все равно ничего.

Мне нужна свежая пара глаз на это.Кто-нибудь еще может найти способ обойти это, что не помешает мне печатать еще?

Спасибо.

Редактировать Чтобы уточнить, да, это отлично работает с другим текстомэлементы ввода (<textarea>, <input> и т. д.).Это конкретно относится к contentEditable.

Также сюда включено doCommand:

doCommand = function(cmd) {
  document.execCommand(cmd, null, null);
}

Ответы [ 2 ]

1 голос
/ 28 августа 2011

Во-первых, нет необходимости отдельно определять клавиши-модификаторы. Из события keyup или keydown можно узнать, удерживались ли клавиши cmd или ctrl , используя свойства события ctrlKey и metaKey.

Во-вторых, в элементах contenteditable сочетания клавиш для команд, выделенных жирным шрифтом и курсивом, уже встроены в браузер.

Конечно, можно перехватить нажатия клавиш, которые вы хотите. Смотри http://jsfiddle.net/Hq43A/

0 голосов
/ 28 августа 2011

В вашей функции doCommand что-то не так.

Посмотрите здесь и попробуйте. Вы увидите это предупреждение "курсивом" на CTRL + I.

Попробуйте добавить несколько предупреждений в ваши функции, и вы увидите, что это очень поможет при отладке.

...