如何在嵌套的setTimeout函数中使用'this'

时间:2013-11-14 20:32:20

标签: javascript jquery html

如果我有一个带有'textInputs'类的输入并且对这些元素有一个粘贴函数,我需要在粘贴事件函数中嵌套一个setTimeout函数,但是如何在超时函数中定义this ?下面的代码不起作用,因为未在setTimeout函数内定义this。谢谢。

$('.textInputs').on('paste',function() { 

       var element = this;

       window.setTimeout(function() {  
       newstr = element.value.replace(/\n/g, '');  

       $(this).val(newstr);

   },100);  
}); 

3 个答案:

答案 0 :(得分:5)

刚刚使用了缓存的一个,setTimeout回调中的this指向全局上下文而不是元素。

$('.textInputs').on('paste',function() { 

       var element = this;
          window.setTimeout(function() {  
          newstr = element.value.replace(/\n/g, '');  
          $(element).val(newstr); //<-- Here
          //or just
          //element.value = element.value.replace(/\n/g, '');
   },100);  
}); 

您可以使用.val( function(index, value) )语法简化此操作:

$('.textInputs').on('paste',function() { 
       var $element = $(this);
       window.setTimeout(function() { 
          $element.val(function(_, currVal){ 
             return currVal.replace(/\n/g, '');
          }); 
    },100);  
}); 

答案 1 :(得分:2)

也许你的意思是这个?

$('.textInputs').on('paste',function() { 

       var element = this;

       window.setTimeout(function() {  
       newstr = element.value.replace(/\n/g, '');  

       $(element ).val(newstr);

   },100);  
}); 

答案 2 :(得分:1)

您引用的是this而不是您的元素。

  var element = $(this);
   window.setTimeout(function() {  
       newstr = element.value.replace(/\n/g, '');  
       element.val(newstr);
   },100);