我正在使用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实际上会生效?
答案 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();
});