为什么在setTimeout函数中未设置此变量?

问题描述

| 我有一个基本的文本区域:
<textarea id=\'text_comment\'></div>
我有这个功能:
$(\'#text_comment\').live(\'keypress\',function() {

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

         alert(string);
    },500);

});
它应警告textarea中的值,但不警告。 我希望它在500ms之后获得textarea的值,但是如果它在
setTimeout
函数内部,则似乎没有设置该变量。     

解决方法

        因为
setTimeout
window
的一种方法,所以上下文变为
window
\。
$(\'#text_comment\').live(\'keypress\',function() {

    var el = this;

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

         alert(string);
    },500);

});
如果您以这种方式保存对el的引用,则可以依靠它而不是
this
而且,您可以只使用
el.value
,因为不需要将其包装在jQuery中,而通过by9ѭ在内部进行完全相同的操作     ,        
this
的值在传递给setTimeout的函数内更改。像这样做:
$(\'#text_comment\').live(\'keypress\',function() {

    var self = this

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

         alert(string);
    },500);

});
    ,        
this
的值取决于当前函数的调用方式。传递给
setTimeout
的函数与事件处理程序是不同的函数,因此
this
的值是不同的。 首先复印ѭ7。
$(\'#text_comment\').live(\'keypress\',function() {
    var that = this;
    setTimeout(function() {
    string = $(that).val();         
         alert(string);
    },500);

});
    ,        因为回调不在
keypress
事件的范围内运行,而是在全局范围
window
中运行。 将引用复制到局部变量,以便将其包含在闭包中:
$(\'#text_comment\').live(\'keypress\',function() {

  var element = this;

  window.setTimeout(function() {
    var string = $(element).val();         
    alert(string);
  },500);

});
    ,        当“ keypress”事件被触发时,函数中的“ 7”值将是“ 21”对象。但是当运行
setTimeout
中的函数(500毫秒后)时,
this
的值已更改为其他值(也许是
window
对象) 将您的代码更改为:
$(\'#text_comment\').live(\'keypress\',function() {

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

         alert(string);
    },500);

});
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...