我想将$(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 );
});
});
答案 0 :(得分:6)
您应该保存对此的引用:
$('input').keyup(function() {
var $this = $(this);
delay(function(){
alert($this.val());
}, 1000 );
});
另一种选择是将this
重新绑定到函数:
$('input').keyup(function() {
delay(function(){
alert($(this).val());
}.bind(this), 1000 );
});
答案 1 :(得分: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);
});
答案 2 :(得分:0)
在函数外部引用$(this)
。
// ...
$('input').keyup(function() {
var $this = $(this);
delay(function() {
alert( $this.val() );
}, 1000)
});
答案 3 :(得分:0)
由于功能范围的变化而改变了。 您需要使用闭包来存储值。
如果您传递的只是值,则不需要$(this)
$('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 );
});