2010-08-23 16 views
5

Ho un campo di testo di input che deve essere limitato su quali caratteri possono essere digitati. Come una forma di difesa contro l'input errato, sto cercando di non lasciare che l'utente digitare cose sbagliate. L'input può essere [a-zA-Z -._] caratteri ed è limitato a 32 caratteri.Prevenire l'immissione di caratteri speciali nel campo di testo html

<input id="aliasEntry" type="text" maxlength="32"> 

Come potete vedere, ho già il limite di 32 caratteri capito, e l'utente viene impedito di digitazione più dopo che il limite è stato raggiunto. Ma sto avendo un problema con l'impedire l'inserimento di caratteri errati.

Ho provato con .keypress di jQuery() e .keydown) collettori di eventi (per fare cose simili alle seguenti:

$("#aliasEntry").keypress(function(e) 
{ 
    var code = e.which || e.keyCode; 
    // 65 - 90 for A-Z and 97 - 122 for a-z 95 for _ 45 for - 46 for . 
    if (!((code >= 65 && code <= 90) || (code >= 97 && code <= 122) || code == 95 || code == 46 || code == 45)) 
    { 
     var text = $("#aliasEntry").val(); 
     text = text.substring(0,text.length); 
     $("#aliasEntry").val(text); 
    } 
}); 

ma il problema con questo è che i browser inserire sempre il carattere digitato nella casella di testo DOPO che l'evento è stato gestito, il che rende il codice inutile perché il personaggio che sto cercando di eliminare non è stato ancora inserito. C'è un modo per impedire semplicemente al browser di inserire il personaggio nella casella di testo dopo che l'utente lo ha digitato?

+2

Quando si utilizza jQuery, non è necessario normalizzare nuovamente ['e.which'] (http://api.jquery.com/event.which/). –

+0

Ricorda che sarebbe meglio avere un'interfaccia utente che spieghi perché la tastiera dell'utente abbia improvvisamente smesso di funzionare. – derobert

+2

Ricordarsi di eseguire anche la convalida sul lato server. La convalida del client è davvero facile da ingannare (disattivare JavaScript sul mio browser in questo caso) –

risposta

5

Si sta utilizzando jQuery, quindi vedere questo: http://api.jquery.com/event.preventDefault/. Basta chiamare e.preventDefault() se il personaggio non è valido, e questo dovrebbe impedire l'azione del browser predefinito, che in questo caso sarebbe l'inserimento di un personaggio.

+0

E farlo durante 'keypress'; in Opera, non puoi impedire l'azione predefinita durante il 'keydown'. –

+0

Sì, funziona alla grande. Stavo guardando anche in quella direzione per capire se l'evento potesse semplicemente essere fermato, ma stavo scherzando con i metodi sbagliati. Grazie! – JDC

0

Usa il tuo ingresso come questo

<input maxlength="32" onKeyUp="chText()" onKeyDown="chText()" id="aliasEntry"/> 

e fare chText() funzione javascript scrittura in esso questo codice qui sotto

function chText() 
{ 
    var str=document.getElementById("aliasEntry"); 
    var regex=/[^a-z]/gi; 
    str.value=str.value.replace(regex ,""); 
} 

non permetterà alcun carattere di entrare tranne a-z e A-Z

Problemi correlati