我需要将Salesforce提供的富文本编辑器的拼写检查属性设置为true。但是,指定了该属性的正文组件始终返回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>
答案 0 :(得分:0)
太早了。
遇到此行代码后,此脚本将立即触发。那时原始<textarea>
仍然存在于页面上,并且装饰器没有运行(装饰器隐藏原始标签并且用整个RTF编辑器注入<iframe>
)。您可以验证它,因为执行在显示此alert()
时停止。
最干净的方法是覆盖onload函数(或装饰器运行的任何地方),类似于这些帖子的用法:
不确定为什么,但似乎即使是这样的自定义onload太快了(我没有时间进一步调试)。
所以,尽管它很丑陋 - 这似乎对我有用:
<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?