2011-01-21 68 views
4

我有一個制卡網站項目。我有一個tinyMCE文本框和卡片的視覺。在更改tinyMCE編輯器的內容時​​,我想更新卡的視覺效果以反映新的文本/更改。TinyMCE的不方法

TinyMCE的配備了一個IsDirty方法:

if (tinyMCE.activeEditor.isDirty()) 
    alert("You must save your contents."); 

我不明白的是在那裏我會放在這個if語句定期進行檢查。我明白JS是事件驅動的,所以它需要被「調用」,我是否每次按下它都會調用它?

回答

4

你可以添加一個全局超時功能,每一秒鐘左右(時間間隔由你)檢查:

function updateCardIfDirty() { 
    if (tinyMCE.isDirty()) { 
    // rerender the card 
    } 
} 

setInterval(updateCardIfDirty, 2000); // check every 2 seconds. 

一個清潔的解決辦法可能是檢查每一個他們使TinyMCE的編輯器發生變化時, 。這可以通過onChange()事件tinyMCE provides成爲可能,如下所示:

tinyMCE.init({ 
    ... 
    setup : function(ed) { 
    ed.onChange.add(function(ed, l) { 
     // rerender the card 
    }); 
    } 
}); 

第一種方法的缺點是,它會執行每2秒,即使他們不編輯卡了一個小時。第二種方法的缺點是,如果他們在1秒內執行10次編輯,那麼在該秒鐘內將卡片放回10次。

所以最後,讓我們嘗試第三種方法,其得到兩全其美,並失去我們提到的這兩個缺點:

tinyMCE.init({ 
    ... 
    setup : function(ed) { 
    ed.onChange.add(function(ed, l) { 

     if (timeout) { 
      clearTimeout(timeout); 
     } 

     timeout = setTimeout(function(){ timeout=null; rerenderCard(); }, 1000); 

    }); 
    } 
}); 
+0

使用「isdirty」的方法我無法得到它的工作時,和按變化不更新就夠了(你需要點擊關閉編輯器或按Enter鍵得到它的更新。 – 2011-01-21 13:02:06

1

我目前想看看如何在這方面解決TinyMCE的。在TinyMCE之外,當前的跨瀏覽器解決方案是使用大多數當前瀏覽器支持的OnTextChange DOM事件。我今天測試它,它非常適合非鍵盤右鍵單擊剪切/粘貼/刪除以及鍵盤更改。 Textchange事件不需要鍵盤事件。 (注意,它需要在DOM中準備,google jquery.textchange.js插件)。

但是,當TinyMCE包裝textarea控件時它不起作用。我目前正在查看源代碼和插件,看看如何實現這個textchange事件。