Firefox中的隐藏输入元素

时间:2009-08-03 21:02:45

标签: javascript internet-explorer firefox fckeditor

我在Firefox中遇到了fckeditor的麻烦。当用户转到页面时,html(编码)存储在隐藏的输入元素中。我调用预定义的fckeditor javascript事件,用隐藏的ContentBody元素中的html填充我的编辑器。

        function FCKeditor_OnComplete( editorInstance )
        {
            editorInstance.InsertHtml("");
            var sample = document.getElementById("ContentBody").value;
            editorInstance.InsertHtml(sample);
        }

这会自动在IE中使用所需的文本填充编辑器,但在Firefox中却没有。 Firebug给了我错误:

  

A为null [中断此错误] var   FCKW3CRange =函数(A){this._Docume ... eateFromRange(this._Document,这一点);}}; \ r \ n

使用Firebug我可以确定在使用Firefox时不会触发事件方法FCKeditor_OnComplete()。然而,它在IE中。关于如何在两种浏览器中使用它的任何想法?

ContentBody的HTML是: <input type="hidden" name="ContentBody" id="ContentBody" value="<%=Model.Article%>" />

4 个答案:

答案 0 :(得分:1)

这很有趣。我从来没有使用FCKeditorOnComplete(我必须删除下划线才能让WMD开心),但它看起来像是一个很好的钩子。您是否试图在下面的FCKEditor函数中设置一个断点?你带着Firefox到那儿了吗?也许这与你的FCKeditorOnComplete在物理上的位置有关......

function WaitForActive( editorInstance, newStatus )
267...{
268    if ( newStatus == FCK_STATUS_ACTIVE )
269    ...{
270        if ( FCKBrowserInfo.IsGecko )
271            FCKTools.RunFunction( window.onresize ) ;
272
273        _AttachFormSubmitToAPI() ;
274
275        FCK.SetStatus( FCK_STATUS_COMPLETE ) ;
276
277        // Call the special "FCKeditor_OnComplete" function that should be present in
278        // the HTML page where the editor is located.
279        if ( typeof( window.parent.FCKeditor_OnComplete ) == 'function' )
280            window.parent.FCKeditor_OnComplete( FCK ) ;
281    }
282}

答案 1 :(得分:0)

您确定您的代码的属性为id =“ContentBody”吗?可以使用属性name =“ContentBody”,IE将(技术上不正确)将其解释为getElementById的ID属性。只有正确使用id,Firefox才会找到它。

答案 2 :(得分:0)

如果你打破错误并向上走,那为什么A没有设置?或者,打破

document.getElementById("ContentBody").value

然后走下堆栈,寻找更具体的原因。

答案 3 :(得分:0)

上个月我在处理一个新项目时找到了解决方案。首先,我将编码的HTML字符串存储在隐藏的输入元素中:

<input type="hidden" name="ContentBody" id="ContentBody" value="<%=Model.Body%>" />

此函数是在完成加载时FCKeditor实例调用的事件。

function FCKeditor_OnComplete(editorInstance) 
{
    var oEditor = FCKeditorAPI.GetInstance(editorInstance.Name);
    var content = parent.document.getElementById("ContentBody").value;
    var EditedContent = content.replace(/\u201C/g, '"');
    oEditor.InsertHtml(EditedContent);
    content = null;
}

似乎Firefox需要javascript来调用parent.document.getElementById()