【问题标题】:Disabling tinyMCE ctrl+s shortcut to enable this shortcut for ajax content save禁用 tinyMCE ctrl+s 快捷方式以启用此快捷方式以保存 ajax 内容
【发布时间】:2013-02-19 19:10:50
【问题描述】:

我在页面中使用 tinyMCE。我捕获 Ctrl+s 以使用ajax保存内容,当焦点不在tinyMCE时,一切正常,但是当焦点在tinyMCE中时它不会工作。我需要在此代码块中插入一段代码(而不是在设置或插件中),以使内容保存工作,即使焦点在 tinyMCE 内。

<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>

【问题讨论】:

    标签: keyboard tinymce shortcut


    【解决方案1】:

    使用init_instance_callback 并定义您的自定义快捷方式。

    示例:

    tinymce.init({
        selector: "textarea",
    
    
        init_instance_callback: function (editor) {
            editor.addShortcut("ctrl+s", "Custom Ctrl+S", "custom_ctrl_s");
            editor.addCommand("custom_ctrl_s", function() {
                alert("234");
                /*
                your custom codes
                */
            });
        }
    
    
    });
    

    【讨论】:

    • 使用 tinymce 5.0.5 运行良好!谢谢
    【解决方案2】:

    这是一个棘手的问题。 您必须在主文档中创建这样的函数。

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

    希望你能明白。

    【讨论】:

    • 我不在 4 上。唯一看似有效的是: setup: function(ed) { if($.browser.msie) ed.addShortcut("ctrl+s", function( ) { }, 功能() { });否则 ed.addShortcut("ctrl+s", "", "");我只是想禁用默认页面
    • 你用的是什么客户端系统?
    猜你喜欢
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多