setTimeout无法正常工作

时间:2013-03-25 10:37:24

标签: javascript settimeout

我有一个脚本,我点击它后按下按钮5秒钟,然后再次启用它。

$(document).on('click', 'button', function () {
    var htmls = $(this).html();
    $(this).prop("disabled", true);
    setTimeout(function () {
        $(this).prop("disabled", false);
        $(this).html(htmls);
    }, 5000);
    $(this).html('<img src="<?=CDN(' / icons / loading / loading5.gif ')?>" />');
});

不知何故setTimeout不会结束,因此按钮不会再次启用。我没有收到任何错误消息。

2 个答案:

答案 0 :(得分:4)

$(this)调用之前将setTimeout保存到变量中,因为this处理程序中的setTimeout关键字引用window对象:

$(document).on("click", "button", function() {
    var $this = $(this),
        htmls = $this.html();

    $this.prop("disabled", true)
         .html('<img src="..." />');

    setTimeout(function() {
       $this.prop("disabled", false)
            .html(htmls);
    }, 5000);
});

答案 1 :(得分:2)

这里没有引用DOM元素。试着放入另一个temarory变量。因为它在setTimeOut之外

 var $this = $(this),
        htmls = $this.html();

    $this.prop("disabled", true);
    setTimeout(function() {
       $this.prop("disabled", false).html(htmls);
    }, 5000);