2013-11-14 57 views
-3

如果我有一個類'textInputs'的輸入並且具有這些元素的粘貼功能,我需要在paste事件函數中嵌套一個setTimeout函數,但是如何才能我在timeout函數裏面定義了this?下面的代碼不起作用,因爲this未在setTimeout函數內部定義。謝謝。如何在嵌套的setTimeout函數中使用'this'

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

     var element = this; 

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

     $(this).val(newstr); 

    },100); 
}); 
+1

UM,您使用的就行了以上'element' ... – epascarello

+0

謝謝大家,現在似乎很明顯,但它甚至沒有發生在我身上。很累。 :) – user2014429

+2

這個問題似乎是脫離主題,因爲_答案一直在你身邊._ – Mathletics

回答

5

只是用在setTimeout的回調點緩存一個本身,this全球範圍內沒有的元素。

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

也許你的意思是這樣的:

$('.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() { 
     newstr = element.value.replace(/\n/g, ''); 

     $(element).val(newstr); 

    },100); 
}); 
1

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

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