Jquery 在TinyMCE编辑器中限制键盘快捷键
试图在jQuery版本的TinyMCE编辑器中找到禁用各个键盘快捷键的位置。当前允许的快捷方式列表为:Jquery 在TinyMCE编辑器中限制键盘快捷键,jquery,tinymce,Jquery,Tinymce,试图在jQuery版本的TinyMCE编辑器中找到禁用各个键盘快捷键的位置。当前允许的快捷方式列表为: ctrl+z撤消 ctrl+y重做 ctrl+b粗体 ctrl+i斜体 ctrl+u下划线 ctrl+1-6 h1-h6 ctrl+7 p ctrl+8 div ctrl+9地址 当前正在禁用除撤消、重做和粗体外的所有快捷方式。其余部分在我们的实现中是不必要的,因为它不需要格式化 我似乎找不到启用这些快捷方式的代码。你能指出在哪里可以找到这个代码吗 在Firefox中禁用测试 这应该有助于
- ctrl+z撤消
- ctrl+y重做
- ctrl+b粗体
- ctrl+i斜体
- ctrl+u下划线
- ctrl+1-6 h1-h6
- ctrl+7 p
- ctrl+8 div
- ctrl+9地址
我似乎找不到启用这些快捷方式的代码。你能指出在哪里可以找到这个代码吗 在Firefox中禁用测试 这应该有助于你开始。您可能需要为
ctrl+u
和ctrl+i
添加空的快捷键,以便在其他浏览器中禁用它,但此代码已经过测试,可以在Firefox中禁用这些操作。仅在tinyMCE的初始化运行后运行(我在Firebug中测试了我的):
背景
它似乎是围绕jscript/tiny_mce/classes/Editor.js的2294行定义的(从完整的开发下载)
此外,它们存储在编辑器.shortcuts
变量的数组中。这些键是用特殊字符设置的,然后是键代码,如下所示:ctrl、、.90
但据我所知,似乎许多浏览器实现了自己版本的ctrl+b
、ctrl+I
、和ctrl+u
,只有壁虎浏览器没有:
// Add default shortcuts for gecko
if (isGecko) {
t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');
t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');
t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');
}
但是如果你环顾四周,你可以看到他们是如何实现的
此外,请研究该方法。您可能可以覆盖默认行为。好的,所以我可以让它工作。我能够使用上面Doug的代码阻止firefox,让IE禁用我想要的密钥,我必须在Doug的代码块之后添加此代码
var $iframe = $('iframe').contents().get(0);
$($iframe).keydown(function(oEvent) {
//italics (ctrl+i & Cmd+i [Safari doesn't allow you to test for Cmd])
if (oEvent.keyCode == '73' && (oEvent.metaKey || oEvent.ctrlKey)){
oEvent.preventDefault();
return false;
}
//underline (ctrl+u & cmd+u [Safari doesn't allow you to test for cmd])
if (oEvent.keyCode == '85' && (oEvent.metaKey || oEvent.ctrlKey)){
oEvent.preventDefault();
return false;
}
});
基本上,TinyMCE将编辑器作为iFrame动态加载,因此我禁用了iFrame中的Ctrl+u和Ctrl+I。I直到iFrame加载完毕,然后附加一个keydown事件并嗅探Ctrl+I和Ctrl+I(我还嗅探mac的Cmd+I和Cmd+u)[尽管Safari不允许您根据此测试cmd。我需要禁用的所有其他功能都已禁用。示例代码,用于在IE和FF中来回切换I B和U
var ctrlKey = false;
function removeShortcuts(){
var e = tinyMCE.activeEditor;
for (var s in e.shortcuts){
if(s=="ctrl,,,73" || s=="ctrl,,,85" || s="ctrl,,,66"){
e.shortcuts[s].func = function(){};
}
}
e.onKeyUp.add(onKeyUp);
e.onKeyDown.add(onKeyDown);
}
function resetShortcuts(){
var e = tinyMCE.activeEditor;
if (isGecko) {
e.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');
e.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');
e.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');
}
e.onKeyUp.remove(onKeyUp);
e.onKeyDown.remove(onKeyDown);
}
function onKeyUp(editor, event){
if(event.keyCode == 17){
ctrlKey = false;
}
}
function onKeyDown(editor, event){
if(event.keyCode == 17){
ctrlKey = true;
}
if(ctrlKey && (event.keyCode == 73 || event.keyCode == 85 || event.keyCode == 66){
tinymce.dom.Event.cancel(event);
}
}
即使这有一个公认的答案,我也会与tinymce4分享我的使用方法。您只需将editor.addShortcut('ctrl+u',“”,“”,“”)添加到setup
方法中的init
事件方法,它将覆盖添加的快捷方式
示例:
在上述代码中,您可以用ctrl+u
替换任何要禁用的快捷键。对于TinyMCE v4:
tinyMCE.init({
设置:函数(编辑器){
on(“init”,function(){
编辑器。快捷键。删除('meta+u','',');/“meta”映射到Mac上的命令和PC上的Ctrl
});
}
})
我更新了我的答案,加入了一个关于如何禁用您不想要的快捷方式的示例。好吧,这个答案没有留下任何不想要的东西。:)收回我的+1@Pekka嗯,谢谢:)起初我认为源代码必须编辑,但他们的快捷方式系统实际上很酷。这在Firefox中似乎很好用,但在Safari、Chrome和IE中似乎不起作用。似乎我无法覆盖浏览器默认值。有什么想法吗?@Redwolfs一点用都没有?或者只是ctrl+i和ctrl+u不工作,因为它们有一个浏览器实现?我确实这样做了,但没有效果?ctrl+u仍然下划线。我的TinyMCE版本是4.7.9
var ctrlKey = false;
function removeShortcuts(){
var e = tinyMCE.activeEditor;
for (var s in e.shortcuts){
if(s=="ctrl,,,73" || s=="ctrl,,,85" || s="ctrl,,,66"){
e.shortcuts[s].func = function(){};
}
}
e.onKeyUp.add(onKeyUp);
e.onKeyDown.add(onKeyDown);
}
function resetShortcuts(){
var e = tinyMCE.activeEditor;
if (isGecko) {
e.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');
e.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');
e.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');
}
e.onKeyUp.remove(onKeyUp);
e.onKeyDown.remove(onKeyDown);
}
function onKeyUp(editor, event){
if(event.keyCode == 17){
ctrlKey = false;
}
}
function onKeyDown(editor, event){
if(event.keyCode == 17){
ctrlKey = true;
}
if(ctrlKey && (event.keyCode == 73 || event.keyCode == 85 || event.keyCode == 66){
tinymce.dom.Event.cancel(event);
}
}
tinyMCE.init({
// Your options here
setup: function(editor) {
editor.on("init", function(){
editor.addShortcut("ctrl+u", "", "");
});
}
})