【问题标题】:Document.getElementById on CKEditor body returning nullCKEditor 主体上的 Document.getElementById 返回 null
【发布时间】:2014-05-08 00:03:19
【问题描述】:

我需要将 Salesforce 提供的富文本编辑器的拼写检查属性设置为 true。但是,指定属性的 body 组件总是返回 null。

因此,我无法更改属性值。我究竟做错了什么?我什至无法使用 jQuery 选择器。

<apex:page >
  <apex:form >
    <apex:inputTextarea richText="true" id="rta"/>
  </apex:form>
  <script>
    alert(document.getElementById('j_id0:j_id1:rta_rta_body'));
  </script>
</apex:page>

【问题讨论】:

    标签: javascript jquery ckeditor salesforce visualforce


    【解决方案1】:

    太快了。

    一旦遇到这行代码,该脚本就会触发。当时原始的&lt;textarea&gt; 仍然存在于页面上并且装饰器没有运行(装饰器隐藏了原始标签并用整个RTF 编辑器注入了&lt;iframe&gt;)。您可以验证它,因为在显示此 alert() 时执行停止。

    最干净的方法是覆盖 onload 函数(或装饰器运行的任何地方),类似于这些帖子的做法:

    1. http://bobbuzzard.blogspot.co.uk/2011/05/onload-handling.html
    2. https://developer.salesforce.com/forums?id=906F0000000957DIAQ

    不知道为什么,但似乎即使是这样的自定义加载也为时过早(我没有时间进一步调试它)。

    所以,尽管它很丑 - 这似乎对我有用:

    <apex:page >
        <apex:form >
            <apex:inputTextarea richText="true" id="rta"/>
        </apex:form>
        <script>
        function setSpellChecker(){
            var iframe = document.getElementById('j_id0:j_id1:rta_frame');
            var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
            iframeDocument.getElementsByTagName('body')[0].spellcheck = true;
        }
        window.setTimeout(setSpellChecker, 1000); // fire after 1 second
        </script>
    </apex:page>
    

    随意尝试,如果你愿意,可以使用 jQuery 的 contents() 美化它...这里有很多问题如何使用 jQuery 很好地访问 iframe,例如 How to get the body's content of an iframe in Javascript?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 2023-03-25
      • 1970-01-01
      • 2015-02-02
      • 2011-11-01
      • 1970-01-01
      相关资源
      最近更新 更多