jQuery.keydown(),.keyup()忽略;我",&引用;B";

jQuery.keydown(),.keyup()忽略;我",&引用;B";,jquery,events,contenteditable,jquery-events,Jquery,Events,Contenteditable,Jquery Events,我这里有一些代码,可以在TextMate的web预览中正常工作,但是Safari正在做一些我不知道如何处理的事情 $(document).ready(function(){ $('*[contentEditable="true"]').focusin(function(){ var _self = this; var isCtrl = false; // Bind events. $(window).keyup( function(e)

我这里有一些代码,可以在TextMate的web预览中正常工作,但是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();
  });
});
当按下control+i或command+i时,我们应该得到一个事件,使
contentEditable
区域中的文本倾斜。问题是,虽然其他标准ASCII/Alpha字符会触发,但B和I不会。现在,如果我
preventDefault()
,仍然什么都没有

我需要一双新的眼睛来观察这件事。还有谁能想出一个办法来解决这个问题,而不妨碍我继续打字

编辑 为了澄清,是的,它可以与其他文本输入元素配合使用(
,等等)。它特别与
contentEditable
相关

此外,此处还包括
docomand

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

您的doCommand函数中有错误

看看,试试看。您将看到它在CTRL+I上显示“斜体”警报


尝试在函数中添加一些警报,您将看到它在调试时对您有很大帮助。

首先,不需要单独检测修改器键。您可以从
keyup
keydown
事件中了解是否使用事件的
ctrlKey
metaKey
属性按住了cmd或ctrl键

其次,在
contenteditable
元素中,浏览器已经内置了用于粗体和斜体命令的键盘快捷键


当然可以拦截你想要的按键。请参见

很好,但您有一个重要的更改–这不是在
上。它是关于
contentEditable
和keydown事件的组合。当
isCtrl==true
时,它将注册,例如,“e”而不是“i”或“b”。@stslavik:可能就是这个问题。尝试将其更改为data contenteditable,并再次尝试将所有“contenteditable”事件更改为“data contenteditable”,因为如果我知道的正确,contenteditable无效,attrcontentEditable可以通过jQuery作为(html5)属性名访问。数据内容可编辑没有结果。很高兴知道。仍然没有回答我的问题-我如何才能拦截“b”或“I”?@stslavik:你的代码没有其他明显的错误,当然可以拦截ctrl-b和ctrl-I。@stslavik:我在回答中添加了一个JSFIDLE示例。非常好。我把违约放在了一个完全错误的地方。谢谢