2011-07-13 2 views
1

J'ai ASPxTextbox et j'essaie d'empêcher les utilisateurs de taper des lettres. J'ai donc mon code de commande:événement ASPxTextBox KeyDown

<dxe:ASPxTextBox ID="phone" Text="" runat="server" MaxLength="18" Width="100px> 
    <ClientSideEvents Validation="Validation" KeyDown = "SkipLetters"/> 
    <ValidationSettings ErrorDisplayMode="ImageWithText" ErrorTextPosition="Bottom" ValidateOnLeave="true" /> 
                         </dxe:ASPxTextBox> 

et javascript pour SkipLetters:

 function SkipLetters(s, e) { 

       if (e.htmlEvent.keyCode <= 90 && e.htmlEvent.keyCode >= 65) { 
        e.htmlEvent.returnValue = false; 
       } 

     } 

Je sais que lorsque les lettres sont en tapant mais en fait je ne sais pas comment empêcher :) Je n'ai essayé de var content = s.GetText() comme premier appel dans les skipletters mais il est trop tard, le contenu est changé. Donc devrais-je dans si GetText instruction, trouver des lettres et les effacer ou est-il possible d'empêcher leur ajout au contenu de la zone de texte?

+0

Pour autant que je sais que c'est la seule fois que l'option que vous avez. Si vous voulez être du côté de la sauvegarde, ajoutez les événements 'keyUp' et 'change' avec la même fonctionnalité. L'arrière-plan est, vous pouvez attraper l'action de collage avec la souris (bouton droit de la souris, puis l'action de collage). – reporter

Répondre

0

J'ai trouvé une solution. "Utilise la force trn!" si quelqu'un a besoin:

<dxe:ASPxTextBox ID="visiblePhoneNumber" Text="+48" runat="server" MaxLength="18" 
    Width="100px"> 
    <ClientSideEvents Validation="PhoneNumberValidation" KeyPress = "CheckKey" /> 
    <ValidationSettings ErrorDisplayMode="ImageWithText" ErrorTextPosition="Bottom" ValidateOnLeave="true" /> 
    <ValidationSettings> 
     <RegularExpression ValidationExpression = "[0-9\s\-\+\(\)]{9,18}" /> 
    </ValidationSettings> 
</dxe:ASPxTextBox> 

JavaScripts:

function CheckKey(s, e) { 
    var key = ASPxClientUtils.GetKeyCode(e.htmlEvent); 
    var char = String.fromCharCode(key); 
    if (e.htmlEvent.shiftKey) { 
     if (!IsAvailableChar(char)) 
      ASPxClientUtils.PreventEvent(e.htmlEvent); 
    } else 
    if (!(IsAvailableChar(char) || IsAvailableKey(key))) ASPxClientUtils.PreventEvent(e.htmlEvent); 

    return; 
} 

function IsAvailableChar(char) { 
    var AvailableChars = "-()"; 
    return AvailableChars.indexOf(char) != -1; 
} 

function IsAvailableKey(key) { 

    switch (key) { 
    case 8: //backspace 
     return true; 
     break; 
    case 189: //minus 
     return true; 
     break; 
    case 46: //delete 
     return true; 
     break; 
    case 37: //left arrow 
     return true; 
     break; 
    case 39: //right arrow 
     return true; 
     break; 
    case 16: //shift 
     return true; 
     break; 
    default: 
     return false; 
     break; 

    } 

} 
1

Utilisez l'ASPxSpinEdit à cette fin. Il a été spécialement conçu pour permettre à l'utilisateur final d'entrer uniquement des chiffres.

+0

thx pour votre aide - mais ASPxSpinEdit permet-il à l'utilisateur de mettre des signes comme +, -, (,)? Parce que les gens utilisent des numéros de téléphone en utilisant tellement de formats - par exemple (71) 333-444-111 ou 321 123 321. Je tiens vraiment à ce qu'ils n'ont pas besoin de penser au numéro de format, mon application les analysera plus tard. – TrN

Questions connexes