我在这里有一些代码,在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();
});
});
当按下control + i
或command + i
时,我们应该收到一个事件,使contentEditable
区域中的文字为斜体。问题是,虽然其他标准的ASCII / Alpha字符会触发,但B和我不会。现在,如果我preventDefault()
,仍然没有。
我需要一双新鲜的眼睛。任何其他人都能看到解决这个问题的方法,这不会阻止我打字吗?
谢谢。
修改
为了澄清,是的,这适用于其他文本输入元素(<textarea>
,<input>
等)。它与contentEditable
具体相关。
此外,此处还包含doCommand
:
doCommand = function(cmd) {
document.execCommand(cmd, null, null);
}
答案 0 :(得分:1)
首先,无需单独检测修改键。您可以从keyup
或keydown
事件中找出 cmd 或 ctrl 键是否使用事件ctrlKey
按住了metaKey
属性。
其次,在contenteditable
元素中,浏览器已经内置了粗体和斜体命令的键盘快捷键。
当然可以拦截你想要的按键。见http://jsfiddle.net/Hq43A/
答案 1 :(得分:0)