为什么这个变量没有在setTimeout函数中设置?

Tay*_*Mac 0 javascript jquery settimeout jquery-selectors jquery-events

嘿程序员,

我有一个基本的textarea:

<textarea id='text_comment'></div>
Run Code Online (Sandbox Code Playgroud)

我有这个功能:

$('#text_comment').live('keypress', function() {

    setTimeout(function() {
    string = $(this).val();         

         alert(string);
    }, 500);

});
Run Code Online (Sandbox Code Playgroud)

它应该警告textarea中的值,但它不会发出任何警报.

我希望它在500ms后获得textarea的值,但是如果它在setTimeout函数内部,它似乎没有设置变量.

med*_*iev 5

上下文成为window的,因为setTimeout是的方法window.

$('#text_comment').live('keypress', function() {

    var el = this;

    setTimeout(function() {
         var string = $(el).val();         

         alert(string);
    }, 500);

});
Run Code Online (Sandbox Code Playgroud)

如果你以这种方式保存对el的引用,你可以依赖它而不是 this

而且,你可以使用,el.value因为它不需要在jQuery中包装它并在内部完成相同的事情.val()