Получение данных после вставки правой кнопкой мыши

Я пытаюсь оценить некоторые данные, введенные в текстовую область после вставки. Когда я использую onkeyup, он обнаруживает, что все в порядке, и делает оценку нормально, когда пользователь использует Cntl-V для вставки. Это ничего не делает, когда они щелкают правой кнопкой мыши и выбирают вставить. Я изменил на onkeyup на onpaste, который обнаруживает Cntl-V и вставку по щелчку правой кнопкой мыши, но данных там нет. Я знаю, что вставка запускается до фактической вставки, поэтому я попытался отложить оценку с помощью setTimeout(), но даже с 5-секундной задержкой он никогда не получит данные, пока функция функции не завершится. Независимо от того, что я делаю, я не могу подсчитать количество элементов, которые были введены. Вот мой код:

function delayStart() {                                                 

  alert("delayStart() function");                                       

  var inData = " ";                                                     
  setTimeout(function()                                                 
                {inData = document.getElementById("loanNumberPaste").value},
                5000);                                                      
  var iData = inData.value;                                             
  alert("iData = " + iData);                                            
  setTimeout(fnUpdCt(iData),5000);                                      
}                                                                       


function fnUpdCt(vId) {                                  

  var strVId = vId.value;                                
  alert("fnUpdCt() function \n" +                        
          "vId = " + strVId);                              

  var i;                                                 
  var iVal = vId.value;                                  
  var vCt  = 0;                                          

  iVal     = iVal.replace(/\s/g,' ');                    
  iVal     = iVal.split('  ');                           

  for (i=0; i < iVal.length; i++) {                      
         if (iVal[i].length > 0) {vCt++;}                  
  }                                                      

  document.getElementById("loanNumberCount").value = vCt;
}                                                        



<textarea id="loanNumberPaste" rows=17 cols=37 tabindex="1"          
             onpaste="delayStart();";onkeyup="fnUpdCt(this);"></textarea>

Будем весьма благодарны за любые советы, которые вы можете предоставить.

1 ответ

Тайм-аут не работает, потому что вместо передачи функции по ссылке вы немедленно вызываете ее и пытаетесь вернуть ее значение.

Просто оберните fnUpdCt в анонимную функцию, и все будет хорошо.

setTimeout(function(){fnUpdCt(iData)},5000);  

Кроме того, вам не нужно ждать 5 секунд - это не факт, что его ждет х количество времени, это факт, что он асинхронный.

Другие вопросы по тегам