jQuery.keydown(),.keyup()忽略;我",&引用;B";
我这里有一些代码,可以在TextMate的web预览中正常工作,但是Safari正在做一些我不知道如何处理的事情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)
$(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示例。非常好。我把违约放在了一个完全错误的地方。谢谢