2013-02-19 118 views
3

我在页面中使用tinyMCE。我捕获Ctrl + s使用ajax保存内容,当焦点不在tinyMCE中时,一切正常,但是如果焦点位于tinyMCE中,则不起作用。我需要一段代码插入此代码块(而不是设置或插件中),以使内容保存工作,即使焦点位于tinyMCE内部也是如此。禁用tinyMCE ctrl + s快捷方式为ajax内容启用此快捷方式保存

<script type="text/javascript"> 
$(document).ready(function() { 
    dssModify = new Sol.Dss.Modify(); 
    dssModify.config = 
     { 
     urlActionContentSave: "<?php echo \Sol\Dss\Dss::me() -> urlActionContentSaveGet() ; ?>", 
     buttonContentSaveId: "<?php echo \Sol\Dss\Dss::me() -> modifyButtonContentSaveIdGet() ; ?>", 
     buttonContentSavingTitle: "<?php echo \Sol\Dss\Dss::me() -> modifyButtonContentSavingTitleGet() ; ?>", 
     buttonContentSaveTitle: "<?php echo \Sol\Dss\Dss::me() -> modifyButtonContentSaveTitleGet() ; ?>", 
     textareaContentId: "<?php echo \Sol\Dss\Dss::me() -> modifyTextareaContentIdGet() ; ?>", 
     formId: "<?php echo \Sol\Dss\Dss::me() -> modifyFormIdGet() ; ?>", 
     idRoutes: "<?php echo $route[ 'id' ] ; ?>" 
    }; 
    whenClicked = function() 
    { 
     $("#"+dssModify.config.textareaContentId).val(tinyMCE.activeEditor.getContent()); 
     dssModify.contentSave(); 
    } 
    $("#<?php echo Sol\Dss\Dss::me() -> modifyButtonContentSaveIdGet() ; ?>").click(whenClicked);//Click Function 
    $(window).keypress(function(event) { 
     if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) 
      return true; 
     whenClicked(); 
     event.preventDefault(); 
     return false; 
    }); 

}//Ready function 
); 
</script> 

回答

3

这是一个棘手的问题。 您将不得不在主文档中创建这样的功能。

function receiveShortCutEvent(eventObject){ 
    //console.log('receiveShortCutEvent', eventObject); 
    $(document).trigger(eventObject); 
    $(document).trigger({type: 'keydown', ctrlKey: eventObject.ctrlKey, altKey: eventObject.altKey, which: eventObject.keyCode, originalEvent:eventObject }); 
    return false; 
} 

在tinymce方面,如果ctrl + h被输入,您将需要调用receiveShortCutEvent。 您可以使用setup configuration paramter

 ed.onKeyDown.add(function onkeydown(ed, evt) { 
      // Shortcut: ctrl+h 
      if (evt.keyCode == 72 && !evt.altKey && !evt.shiftKey && evt.ctrlKey && !evt.metaKey) { 
       setTimeout(function(){ 
        var e = { type : 'keydown'}; 
        e.charCode = e.keyCode = e.which = 72; 
        e.shiftKey = e.altKey = e.metaKey = false; 
        e.ctrlKey = true; 
        window.parent && window.parent.receiveShortCutEvent && window.parent.receiveShortCutEvent(e); 
       }, 1); 
      } 
}); 

我希望你明白。

+0

我在FF 32.0.3中试过这个 - 不起作用! – 2014-09-30 20:17:31

+0

它不会使用tinymce4(tinymce3只)工作 – Thariama 2014-10-01 11:38:17

+0

我不是4.只有似乎已工作的事情是: 设置:功能(ED){ 如果($ browser.msie) ed.addShortcut (“ctrl + s”,function(){},function(){}); else ed.addShortcut(“ctrl + s”,“”,“”); } 我只是想禁用默认页面 – 2014-10-01 17:11:48