【问题标题】:How to set focus on rich-text-field, in edit-mode of a contenttype?如何在内容类型的编辑模式下将焦点设置在富文本字段上?
【发布时间】:2015-08-19 06:49:48
【问题描述】:

我想在编辑项目时最初将焦点设置在项目的文本字段上,但无法克服 TinymMCE 的 iframe 启动问题。禁用 TinyMCE 时,一切正常,文本字段可聚焦。我尝试在 TinyMCE 的 body-element 中模拟点击,也没有运气。是否有可能通过 JS 聚焦 body-field?

这是我迄今为止尝试过的:

(function($) {

    $(document).ready(function() {

        $('#text').focus()          // Only works, when TinyMCE is disabled.

        $('body#content').click() // Cannot click into TinyMCE's body.

        $('#text_bold').click() // Cannot even click one of the editor's buttons.

        setTimeout(function() {
                            // Tried same as above with time-delay, no luck.
        }, 277);
    });

    $(window).load(function() {
                      // Tried the same as in doc.ready, no luck.
    });

})(jQuery);

【问题讨论】:

  • 分享一些相关代码,以便我们更好地帮助您。
  • @BhushanKawadkar:使用代码示例更新了任务。

标签: javascript jquery tinymce focus plone


【解决方案1】:

我知道这有点老了,但我确实很难在网上找到解决方案,所以我分享一下。在您的 tinymce.init() 代码块中添加此内容。如果需要,更改选择器或事件。

selector: "textarea.tinymce",
setup: function (editor) {
        editor.on('mouseup', function (e) {
        this.focus();
    });
}

【讨论】:

    【解决方案2】:

    TinyMCE 加载在 IFRAME 中,因此它不在主文档的 DOM 中。直接 jQuery 调用将不起作用。

    这是我使用的旧代码(Plone 4.3 附带的 TinyMCE 版本):

    (function($) {
    
        function checkTinyMCELoaded () {
    
            if (window.tinymce==undefined || !tinymce.editors.length) {
                setTimeout(checkTinyMCELoaded, 100);
                return;
            }
    
            $('#text_ifr').contents().find(".mceContentBody").get(0).focus();
    
        }
    
        $(document).ready(function() {
            setTimeout(checkTinyMCELoaded, 100);
        });
    
    })(jQuery);
    

    它丑陋。最好的方法是摆脱 setTimeout 并在 TinyMCE 加载事件上附加一个处理程序,但是当我研究这个时,我发现这在 Plone 上并不容易,因为您必须更改由 Plone JS 完成的 TinyMCE 的 .init() 调用。

    【讨论】:

    • Ja 丑陋,但有效!感谢 Plone 的 init() 的提示,这将是下一步,但你救了我,mille grazie!
    • P.S.:if 语句现在会导致“递归过多”错误,尽管它曾经可以工作。也许通过 jQ 的 load-wrapper 在这里混合加载表单。
    • P.P.S.:那是我的错,我传递了一个附加参数,该参数也通过其他函数循环,这导致了无限递归。修复了这个问题,你的 sn-p 现在又可以正常工作了。
    • 要获取在 TinyMCE 窗口中输入的文本,是否改为 my_text = $('#text_ifr').contents().find(".mceContentBody").get(0).val();?
    猜你喜欢
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    相关资源
    最近更新 更多