SetHTML之后立即在FCKeditor上的ResetIsDirty - 使用Javascript进行并发/计时问题

时间:2010-10-19 21:05:54

标签: javascript fckeditor

我正在使用IsDirty检查我的FCKeditor中的更改。不幸的是,它的功能似乎是异步的。

这是失败的代码:

var txtObj = $('activities').EstActText1.id;
var oEditor = FCKeditorAPI.GetInstance(txtObj);
oEditor.SetHTML(jsonObj.DATA.ESTACTTEXT1.toString());
oEditor.ResetIsDirty();

问题是,SetHTML不会立即生效(如果您使用GetHTML立即进行检查,它将返回以前在textarea中的内容)。因此,ResetIsDirty将运行,然后HTML将实际更改,脏标志将再次设置。

有什么办法可以在继续之前强制完成SetHTML调用吗?如果没有,有没有办法(除了ghetto setTimeout调用会增加延迟而不一定总是有效)以确保在更改HTML后ResetIsDirty实际上会生效?

2 个答案:

答案 0 :(得分:0)

我仍然会对直接答案感兴趣,但我倾向于那种不太可行的方面。它需要一些睡眠功能,但JavaScript不会走向那个领域。

但是,您假设要执行的操作是处理FCKeditor_OnComplete事件:

function FCKeditor_OnComplete( editorInstance )
{
    editorInstance.Events.AttachEvent( 'OnAfterSetHTML', function(){
        editorInstance.ResetIsDirty(); // clean flag to avoid having to save
    } ) ;
    editorInstance.ResetIsDirty(); //clean flag upon initial load as well
}

将其放置在带有延迟设置的脚本标记中。

答案 1 :(得分:0)

我知道,问题不是实际问题,但对某人可能有用。尝试使用:

ckeditor = CKEDITOR.instances['Editor_ID'];
ckeditor.setData(lyr_data.lyrics,function(){
    ckeditor.updateElement();
    ckeditor.resetDirty();
});