有人可以在下面的代码中找到问题
$(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 :(得分: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);
});
});
答案 1 :(得分:3)
setTimeout
不会在同一范围内调用。因此this
与第二个示例中的this
不同。
...
var self = this;
setTimeout(function () {
var txtVal = self.value;
$('#content').css("font-size", txtVal + "%");
}, 3000);
...
答案 2 :(得分: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);
});
});
答案 3 :(得分:0)
在代码段中,“this.value”在3秒后返回“undefined”。
所以,使用选择器,而不是这个
$(document).ready(function() {
$("#leftsettingswindow").on("keyup", "#fontsize2", function() {
setTimeout(function() {
var txtVal = $('#fontsize2').val();
$('#content').css("font-size", txtVal + "%");
}, 3000);
});
});