代码之家  ›  专栏  ›  技术社区  ›  jtpereyda

在使用Javascript执行SetHTML并发/计时问题后立即重置FCKeditor上的isdirty

  •  1
  • jtpereyda  · 技术社区  · 14 年前

    我正在使用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调用)来确保ResetIsDirty在HTML更改后实际生效?

    2 回复  |  直到 14 年前
        1
  •  0
  •   jtpereyda    13 年前

    我仍然对一个直接的答案感兴趣,但我倾向于认为这不太可行。它需要一个睡眠函数,但JavaScript并没有朝这个方向发展。

    但是,你是什么 想象上的

    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
    }
    

    这是放在脚本标记中的 具有延迟集 .

        2
  •  0
  •   cooler    10 年前

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