2013-05-07 133 views
1

我在grails中使用ckeditor插件。 我在ckeditor.js如何覆蓋javascript中的setTimeOut函數

setTimeout(function(){var u=t.getInputElement(); 
    u&&u.$.focus(); 
},0) 

setTimeout(function(){var u=t.getInputElement(); 
    if(u){ 
    u.$.focus(); 
    u.$.select();}},0) 

我需要改變了時間從0此功能可說10000 現在的問題是我,我都問不碰ckeditor.js文件,因爲它是插件文件,並在許多地方使用。 所以我應該在一些導入ckeditor.js的本地文件中進行更改。

所以,我應該如何重寫此功能,或者做別的事情來改變超時功能

+1

如果setTimeout未分配給變量,則不能這樣做 – vsync 2013-05-07 08:53:03

+0

爲了覆蓋'setTimeout()'定時器,您需要原始調用的返回值。如果不更改ckeditor.js文件,這將是不可能的。 – Phylogenesis 2013-05-07 08:55:04

+0

我已經通過CKEditor的API消失,有一種方法CKEDITOR.tools.setTimeout( 函數() { 警報( '2秒後執行的'); }, 2000);但我不確定如果將它添加到本地js文件中它將如何工作。它會覆蓋該功能嗎? – user1298426 2013-05-07 10:37:23

回答

0

的價值創造一個新的JavaScript文件,並寫入以下方法

(function() { 
    var oldsetTimeout = setTimeout; 
    setTimeout = extendedsetTimeout; 
    function extendedsetTimeout() { 
     setTimeout();//call old method 
     doSomething(); 
    } 
})(); 
+0

我收到錯誤:對象不支持setTimeout = extendedsetTimeout上的此操作;此外,這種邏輯變化將如何超時? – user1298426 2013-05-07 10:34:22

0

忠言:調試源文件,沒有內置和縮小版本...

你很可能意味着these lines。只需用您自己的函數覆蓋CKEDITOR.ui.dialog.textInput.prototype.focus函數即可。

+0

所以我應該添加你提到的行,並將超時從0改爲任何我需要的,並且這應該延遲焦點()執行時間,無論setTimeout在哪裏使用,對吧? – user1298426 2013-05-08 10:19:22