2013-05-07 87 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