2013-01-02 6 views
2

붙여 넣기가 발생한 후 텍스트 영역에 입력 된 일부 데이터를 평가하려고합니다. onkeyup을 사용할 때 사용자가 Cntl-V를 붙여 붙여 넣을 때 괜찮은지를 감지하고 평가를 수행합니다. 마우스 오른쪽 버튼을 클릭하고 붙여 넣기를 선택하면 아무 작업도 수행하지 않습니다. onkeyup으로 바꾸어서 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 양, 그 사실 비동기식 그.