-3

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

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

       var element = this;

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

       $(this).val(newstr);

   },100);  
}); 
4

3 回答 3

5

只是使用了缓存本身,this在 setTimeout 回调中指向全局上下文而不是元素。

$('.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);  
}); 
于 2013-11-14T20:33:36.730 回答
2

也许你的意思是这个?

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

       var element = this;

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

       $(element ).val(newstr);

   },100);  
}); 
于 2013-11-14T20:33:37.560 回答
1

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

  var element = $(this);
   window.setTimeout(function() {  
       newstr = element.value.replace(/\n/g, '');  
       element.val(newstr);
   },100);  
于 2013-11-14T20:34:55.043 回答