2013-11-14 3 views
-3

Если у меня есть вход с текстовыми вводами класса и есть функция вставки для этих элементов, мне нужно вложить функцию setTimeout внутри функции вставки, но тогда как Я определяю this внутри функции таймаута? Код ниже не работает, так как this не определен внутри функции setTimeout. Спасибо.Как использовать «this» внутри вложенной функции setTimeout

$('.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

Просто использовал сам кэшированные один, 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); 
}); 
2

возможно вы имеете в виду это?

$('.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); 
Смежные вопросы