Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在TinyMCE编辑器中限制键盘快捷键_Jquery_Tinymce - Fatal编程技术网

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中禁用测试 这应该有助于

试图在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+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", "", "");
        });
    }
})