代码之家  ›  专栏  ›  技术社区  ›  notbrain

自定义jQuery延迟回调

  •  0
  • notbrain  · 技术社区  · 14 年前

    我正在用一个有两个参数的函数扩展jQuery:回调函数和超时。我使用的是1.4之前的版本,所以没有内置.delay(),但这并不是我真正想要的。

    我已经从下面开始了,但还不清楚

    2如何 应该 如果可能的话,我会叫它吗?

    $.extend({
      delay: function(callback, msec) {
    
        alert(callback);     // as expected
        alert(msec);         // as expected
    
        if(typeof callback == 'function'){
    
          setTimeout("callback()", msec); // why callback() undefined here?!
    
        }
    
      }
    
    });
    
    //Usage:
    $.delay(function(){
      alert("this is delayed 5sec");
    }, 5000);
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Jason    14 年前

    回调未定义,因为您将它作为字符串传递。请执行以下操作:

    setTimeout(callback, msec);
    
        2
  •  2
  •   Felix Kling    14 年前

    为什么在setTimeout中没有定义回调函数?

    "callback()" setTimeout ( delay callback 不存在(我认为它会 在全局范围内进行评估)。

    function a() {
        alert('a');
    }
    
    (function() {
        function a() {
            alert('b');
        }
        setTimeout('a()', 1000);
    })();
    

    a .


    a() 在匿名函数中,它将发出警报 b :

    function a() {
        alert('a');
    }
    
    (function() {
        function a() {
            alert('b');
        }
        setTimeout(function() {eval('a()');}, 1000);
    })();