2014-05-03 30 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); 
    }); 
});