我想在我的jQuery函数中调用editObject(),initalisation调用确实有效,但是setTimeout不起作用,如何让它运行? Console说setTimeout调用时没有定义editObject:
(function($){
$.fn.extend({
...
editObject()
function editObject() {
alert("Test!");
setTimeout('editObject()', 1000);
}
return this.each(function() {
var o = options;
});
}
});
})(jQuery);
感谢您的帮助!
答案 0 :(得分:8)
它不起作用,因为在匿名函数的范围内声明了editObject(),但是setTimeout()会破坏在全局上下文中传递它的字符串。试试这个:
setTimeout(editObject, 1000);
答案 1 :(得分:5)
你可以试试这个:
setTimeout(function(){ editObject.call() }, 1000);
或者:
setTimeout(arguments.callee, 1000);
答案 2 :(得分:2)
您应该避免使用setTimeout
的字符串版本。
我相信,在这种情况下,Javascript正在寻找函数window.editObject
,但这不存在。
您应该使用:
setTimeout(editObject,1000);
相反,因为这是在调用时抓取对象的引用,因此该函数将可用于Javascript,以便在超时到期时进行调用
答案 3 :(得分:1)
直接使用函数引用(而不是在全局上下文中计算的字符串),如下所示:
setTimeout(editObject, 1000);
答案 4 :(得分:0)
<强>更新强> 我当然误解了这个问题,我编辑的原始代码正在运行:
var foo = function () {
var that = this;
that.editObject = function() {
alert('Test');
setTimeout(that.editObject, 1000);
}
}
new foo().editObject();
...
每当Javascript引擎尝试调用jQuery函数中定义的“editObject()”时,它就超出了jQuery函数的范围,它实际上是在全局范围内,但是你的editObject()函数是在你的jQuery中定义的功能
您可以在全局范围内创建editObject或创建对jQuery函数的引用,并将其传递给setTimeout调用,如:
var that = this;
that.editObject = function() {
alert('Test');
setTimeout(that.editObject(), 1000);
}