2012-08-29 2 views
1

asp.net 텍스트 상자 onkeyup 이벤트 문제가 있습니다. asp.net 텍스트 상자에 10 진수 만 허용하는 요구 사항이 있습니다. 그것을 달성하기 위해 onkeyup 이벤트에서 자바 스크립트 함수를 호출합니다. javascript 함수는 입력을 올바르게 확인하지만 사용자가 알파벳이나 문자를 입력하지 못하게합니다. onkeychange 및 onkeypress 이벤트는이 텍스트 상자 값에 의존하는 마진 백분율의 잘못된 계산을 유발하는 백 스페이스 키를 감지하지 못하는 것을 제외하고는 모두 잘 작동합니다.asp.net 텍스트 onkeyup 이벤트

<asp:TextBox ID="txtListPrice" runat="server" CssClass="textbox" MaxLength="50" 
               onkeyup= "return IsNumberKey(event);" >  </asp:TextBox> 
function IsNumberKey(evt) { 

     //obj.value = obj.value.replace(/[^0-9]/g, ""); 
    var charCode = (evt.which) ? evt.which : event.keyCode; 
    if (charCode <= 31 || charCode == 46 || (charCode >= 48 && charCode <= 57)) { 
     return CalculateMargin(); 
    } 
    else { 
     return false; 
    } 
} 

function CalculateMargin() 
{ 
    var ListPrice = parseFloat(document.getElementById('<%=txtListPrice.ClientID%>').value); 
    var Cost = parseFloat(document.getElementById('<%=txtCost.ClientID%>').value); 
    var result = false; 

    if (ListPrice != NaN && Cost != NaN) 
    { 
     if ((ListPrice != "" && Cost != "")) 
     { 
       var result = Math.round(((ListPrice - Cost)/(Cost)) * 100); 
       document.getElementById('<%=txtMargin.ClientID%>').readOnly = false; 
       document.getElementById('<%=txtMargin.ClientID%>').value = result; 
       document.getElementById('<%=txtMargin.ClientID%>').readOnly = true; 
       result = true; 
     } 
     else 
      result = false; 
    } 
    return result; 
} 

감사

답변

1

OnKeyUp을 이벤트의 keycode 속성이 unicode 누르면 문자를 돌려줍니다. 당신은 키 백 스페이스의 가치를 확인하기 위해 자바 스크립트 경고를 사용할 수 있습니다

alert(event.keyCode); 

백 스페이스 키는 if 문에서 유니 코드 당신은 그것을 사용할 수 있습니다 8.이며, 다음 CalculateMargin 기능은 백 스페이스 키를 누를 때 실행됩니다 . 당신의 else 문에서

if (charCode <= 31 || charCode == 46 || (charCode >= 48 && charCode <= 57) 
    || charCode == 8) 
{ 
    return CalculateMargin(); 
} 

, 내가 문자열을 통해 검색 및 번호없는 모든 문자를 제거하거나 이론에 있어야하는 문자열의 마지막 문자를 제거하여, 잘못된 문자를 제거 할 false를 반환하기 전에 기분을 상하게하는 성격. javacript slice 함수를 사용하여이 작업을 수행 할 수 있습니다.

else 
{ 
    var txtListPrice = document.getElementById('<%=txtListPrice.ClientID%>'); 
    var txtValue = txtListPrice.value; 
    txtListPrice.value = txtValue.slice(0, -1); 
    return false 
} 
관련 문제