如何在内容类型的编辑模式下将焦点设置在富文本字段上?

时间:2015-08-19 06:49:48

标签: javascript jquery tinymce focus plone

我想在编辑时将焦点初始设置为项目的文本字段,但无法克服TinymMCE的iframe踢入。当禁用TinyMCE时,一切都按预期工作,文本字段是可聚焦的。我尝试模拟TinyMCE的body-element中的点击,也没有运气。是否有可能通过JS关注身体场?

这是我到目前为止所尝试的:

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

2 个答案:

答案 0 :(得分:2)

我知道这有点老了,但我肯定很难在网上寻找解决方案,所以我正在分享。在你的tinymce.init()代码块中添加它。如果需要,可以更改选择器或事件。

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

答案 1 :(得分:1)

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上这不是那么容易,因为你必须改变TinyMCE的.init()调用通过Plone JS。