2013-01-02 76 views
2

我想要評估粘貼發生後輸入到textarea的一些數據。當我使用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> 

任何建議你可以提供將不勝感激。

回答

3

超時不起作用,因爲不是通過引用傳遞函數,而是立即調用它並試圖返回它的值。

只是將fnUpdCt換成匿名函數,應該沒問題。

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

而且,你也不需要等待5秒鐘 - 它不是事實的時候其等待X量,它的事實,即它是異步的。