2012-08-15 91 views
1

我想通過$(this)來運行,但我不確定。有一個類似的線程,但我仍然無法使其工作。我希望有人能幫助我。

$(document).ready(function() { 
    var delay = (function(){ 
    var timer = 0; 
    return function(callback, ms){ 
     clearTimeout (timer); 
     timer = setTimeout(callback, ms); 
    }; 
    })(); 

    $('input').keyup(function() { 
     delay(function(){ 
     alert($(this).val()); 
     }, 1000); 
    }); 
}); 

回答

5

你應該參考保存到此:

$('input').keyup(function() { 
    var $this = $(this); 
    delay(function(){ 
     alert($this.val()); 
    }, 1000); 
}); 

另一種選擇是重新綁定this的功能:

$('input').keyup(function() { 
     delay(function(){ 
     alert($(this).val()); 
     }.bind(this), 1000); 
    }); 
0

保持對它的引用$(this)功能之外。

// ... 

    $('input').keyup(function() { 
     var $this = $(this); 
     delay(function() { 
      alert($this.val()); 
     }, 1000) 
    }); 
0

由於功能範圍的改變,這個改變了。 您需要使用閉包存儲該值。

如果你所傳遞的價值是你不需要$(本)

$('input').keyup(function() { 
    var val = this.value; 
    delay(function(){ 
    alert(val); 
    }, 1000); 
}); 

另一種方式是

$('input').keyup(function() { 
    delay((function(val){ 
    return function() { 
     alert(val); 
    }; 
    }(this.value)), 1000); 
}); 
1

您需要把上下文:

return function(callback, ms, context){ 
    clearTimeout (timer); 
    timer = setTimeout(function() { 
     callback.call(context); 
    }, ms); 
}; 

然後

delay(function() { 
    alert($(this).val()); 
}, 1000, this); 

但是當其他人發佈時,將上下文保存在本地變量中可能是您​​真正想要的。這是另一種方式:

$('input').keyup(function() { 
    delay((function(self) { 
    return function() { 
     alert($(self).val()); 
    }; 
    }(this)), 1000); 
});