2014-05-03 33 views
0

一个回调函数的人可以在下列的setTimeout在不工作

$(document).ready(function() { 
    $("#leftsettingswindow").on("keyup", "#fontsize2", function() { 
     setTimeout(function() { 
      var txtVal = this.value; 
      $('#content').css("font-size", txtVal + "%"); 
     }, 3000); 
    }); 
}); 

这个完美的作品代码中的问题,

$(document).ready(function() { 
    $("#leftsettingswindow").on("keyup", "#fontsize2", function() { 

      var txtVal = this.value; 
      $('#content').css("font-size", txtVal + "%"); 

    }); 
}); 

任何想法?

+0

什么是控制台的错误信息? – doniyor

+0

即使改变this.value后仍然没有调整大小;对您的建议 – Sandor

+0

event.returnValue已弃用。请改用标准的event.preventDefault()。 未捕获TypeError:无法读取未定义的属性'toLowerCase' – Sandor

回答

5

this不是局部变量,所以它不保存在闭包中。你需要绑定一个局部变量:

$(document).ready(function() { 
    $("#leftsettingswindow").on("keyup", "#fontsize2", function() { 
     var savedThis = this; 
     setTimeout(function() { 
      var txtVal = savedThis.value; 
      $('#content').css("font-size", txtVal + "%"); 
     }, 3000); 
    }); 
}); 
+0

这是完美的。作品!!!感谢解决方案和解释。 – Sandor

+0

啊!谢谢,那让我很开心。我变得疯了:-) – LuBre

3

setTimeout不在相同的范围内调用。所以this和第二个例子中的this不一样。

... 
var self = this; 

setTimeout(function() { 
    var txtVal = self.value; 
    $('#content').css("font-size", txtVal + "%"); 
}, 3000); 
... 
0

感谢Barmar谁在另一个线程上回答了这个问题。

“this”不是局部变量,所以它不保存在闭包中。你需要一个局部变量绑定到它:

$(document).ready(function() { 
    $("#leftsettingswindow").on("keyup", "#fontsize2", function() { 
     var savedThis = this; 
     setTimeout(function() { 
     var txtVal = savedThis.value; 
      $('#content').css("font-size", txtVal + "%"); 
     }, 3000); 
    }); 
}); 
0

在代码段中,“THIS.VALUE”返回“未定义”后3秒。

因此,使用选择的,而不是这个

$(document).ready(function() { 
    $("#leftsettingswindow").on("keyup", "#fontsize2", function() { 
    setTimeout(function() { 
     var txtVal = $('#fontsize2').val(); 
     $('#content').css("font-size", txtVal + "%"); 
    }, 3000); 
    }); 
});