在没有重新加载页面的情况下重新加载当前功能

时间:2016-08-12 09:43:41

标签: jquery

如果可能,我想在延迟后重新加载jQuery prototype / function而不刷新所有页面。

my.prototype.reloadMe = function () {
    setTimeout(function(){
      my.reloadMe();
    },1000);
    alert('ok');
};

我尝试在函数中使用setTimeout,但它没有工作:它只刷新一次。

感谢您的建议或解释。

3 个答案:

答案 0 :(得分:3)

在代码中定义原型函数,然后尝试将其称为对象函数。您应该收到类似&#34的错误; my.reloadMe()不是函数"。

my.prototype.reloadMe = function () {
    setTimeout(function(){
      my.reloadMe(); // "my" object does not contain "reloadMe" function 
    },1000);
    alert('ok');
};

如果要访问此函数,可以显式调用此原型函数:

setTimeout(function(){
  my.prototype.reloadMe();
}, 1000);

或实例化你的对象并调用这个函数:

setTimeout(function(){
  new my().reloadMe();
}, 1000);

两者听起来都不正确。

看起来最好的解决方案是命名您的匿名函数:

my.prototype.reloadMe = function reload() {
    setTimeout(reload, 1000);
    alert('ok');
};);
您使用setTimeOut的代码中的

注1:,而它是setTimeout。 JS区分大小写。也许,它可能是错误的来源。

注2:任何此代码都会使其在无限循环中运行。所以,实际上,你会每秒都收到警报。我希望这正是你想要实现的目标:)

答案 1 :(得分:2)

获取正确的实例应该是this.reloadMe

my.prototype.reloadMe = function () {
    var that = this;

    setTimeOut(function(){
        that.reloadMe();
    }, 1000);

    alert('ok');
};

但这将是一个无限循环。如果你只想再次调用它,你必须打破这个。

my.prototype.reloadMe = function () {
    var that = this;

    if( !that.delayedCalled ) {
        setTimeOut(function() {
            that.delayedCalled = true;
            that.reloadMe();
        }, 1000);
    }

    alert('ok');
};

答案 2 :(得分:1)



//Create your object:

function myobject(){
  
}

//add prototype to that object

myobject.prototype.reloadMe = function(){
  
  // instead of recursion you can use interval
  
  setInterval(function () {
    alert('ok');
  }, 1000);
}

// instantiate that object

var my = new myobject();

//call your function

my.reloadMe();