2010-01-09 221 views
9

嘗試查找在jQuery版本的TinyMCE編輯器中禁用單個鍵盤快捷鍵的位置。目前允許的快捷鍵列表是:限制TinyMCE編輯器中的鍵盤快捷鍵

  • CTRL + Z撤消
  • Ctrl + Y重做
  • Ctrl + B鍵大膽
  • CTRL + I斜體
  • ctrl + u下劃線
  • CTRL + 1-6H1-H6
  • CTRL + 7 p
  • CTRL + 8 DIV
  • CTRL + 9個地址

目前希望禁用所有快捷鍵,但撤消,重做和大膽。其他人在我們的實施中由於不需要的格式而不太理智。

我似乎無法找到啓用這些快捷方式的代碼。你能指出在哪裏可以找到這個代碼。

回答

4

禁止在Firefox

測試這應該有助於讓你開始。您可能需要實際添加ctrl+uctrl+i的空快捷鍵,以便在其他瀏覽器中將其禁用,但此代碼已經過測試以禁用Firefox中的操作。只是tinyMCE的初始化運行後運行(我測試了螢火蟲雷):

for(var i in tinyMCE.editors){ 
    var editor = tinyMCE.editors[i]; 
    for(var s in editor.shortcuts){ 
    var shortcut = editor.shortcuts[s]; 
    // Remove all shortcuts except Bold (66), Redo (89), Undo (90) 
    if(!(s == "ctrl,,,66" || s == "ctrl,,,89" || s == "ctrl,,,90")){ 
     // This completely removes the shortcuts 
     delete editor.shortcuts[s]; 

     // You could use this instead, which just disables it, but still keeps 
     // browser functionality (like CMD+U = show source in FF Mac) from interrupting the flow 
     // shortcut.func = function(){ }; 
    } 
    } 
} 

背景

這似乎周圍線2294定義的jscripts/tiny_mce/classes/Editor.js(從全面發展下載)。

此外,它們存儲在Editor.shortcuts變量的數組中。他們的鍵是用特殊的字符,然後鍵碼,如下所示:ctrl,,,90

但是,從我所知道的,似乎很多瀏覽器實現自己的ctrl+bctrl+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'); 
} 

但如果你看看身邊有你可以看到他們如何啓用它。

此外,請查看Editor.addShortcut方法。您可能可以覆蓋默認行爲。

+0

我更新了我的答案,包括有關如何禁用你不想快捷方式的樣本。 – 2010-01-09 17:38:51

+0

那麼,這個答案不會留下任何想要的。 :)撤回我的。 +1 – 2010-01-09 17:51:45

+0

@Pekka很好,謝謝:)起初我以爲源碼不得不被編輯,但他們的快捷系統實際上非常酷。 – 2010-01-09 17:55:27

3

好,所以我能夠得到這個工作。我能夠阻止使用道格的代碼上面的Firefox來讓IE禁用密鑰的我想我不得不添加此代碼後的道格的代碼塊。

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 + UCTRL + I。我什麼,直到內嵌框架加載完成,然後附上keydown事件和嗅探CTRL + ICTRL + I(我也嗅出Cmd的+我Cmd + U鍵爲Mac [雖然Safari瀏覽器榮獲「T讓你根據這個link測試CMD。其他的都是殘疾人,我需要禁用。

2

示例代碼從允許IB和U在IE和FF來回切換。

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); 
    } 
} 
8

儘管這有一個公認的答案呃,我會分享我用tinymce4的東西。你可以簡單的setup方法中添加editor.addShortcut('ctrl+u', "", "")init事件的方法,這將覆蓋添加快捷方式

例子:

tinyMCE.init({ 
    // Your options here 
    setup: function(editor) { 
     editor.on("init", function(){ 
      editor.addShortcut("ctrl+u", "", ""); 
     }); 
    } 
}) 

您可以代替任何快捷鍵,你想禁用與ctrl+u在上面的代碼。