setTimeout函数无法使用值更改

时间:2014-06-19 18:32:25

标签: javascript jquery

setTimeout函数不符合预期。 这是我的代码:

$(document).delegate('.pur','click', function(e){
    var productid = $(this).attr('id');
    var quantity = $('#qua').val();
    if(quantity>0){
        this.value='Adding';
    }
    else{
        this.value='Min 100';
        setTimeout(function(){this.value='Buy now'}, 3000);
    }
});

以上代码根本不起作用,它不会像预期的那样在3秒后更改值。任何缺陷或其中的东西?任何人都可以帮助找到它的错误吗?

3 个答案:

答案 0 :(得分:2)

范围界定问题

在你的setTimeout中,"这个"不会引用与setTimeout外部相同的对象。

像这样修复

$(document).delegate('.pur','click', function(e){
    var productid = $(this).attr('id');
    var quantity = $('#qua').val();
    if(quantity>0){
        this.value='Adding';
    }
   else{
       this.value='Min 100';
       var that = this; // hold a reference to "this" as "that" 
       setTimeout(function(){that.value='Buy now'}, 3000); // use "that" instead of   "this"
    }
});

答案 1 :(得分:1)

对" this"的引用在匿名函数中没有指向任何东西。您可以像这样更改它(即self是匿名函数的可见范围内的变量):

     this.value='Min 100'; 
     var self = this;
     setTimeout(function(){self.value='Buy now'}, 3000);

答案 2 :(得分:1)

这也应该可以解决问题

setTimeout(function() { this.value = 'Buy now'; }.bind(this), 3000)