2

我正在尝试评估粘贴后输入到文本区域的一些数据。当我使用 onkeyup 时,它会检测是否正常,并且当用户使用 Cntl-V 粘贴时评估是否正常。当他们右键单击并选择粘贴时,它什么也不做。我将 onkeyup 更改为 onpaste,它同时检测 Cntl-V 和右键单击粘贴,但数据不存在。我知道在执行实际粘贴之前触发了 onpaste,因此我尝试使用 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>

您可以提供的任何建议将不胜感激。

4

1 回答 1

3

超时不起作用,因为不是通过引用传递函数,而是立即调用它并尝试返回它的值。

只需将 fnUpdCt 包装在一个匿名函数中就可以了。

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

此外,您不需要等待 5 秒 - 这不是它等待 x 时间的事实,而是它异步的事实。

于 2013-01-02T21:06:57.593 回答