Professional Documents
Culture Documents
which; if((tecla>47 && tecla<58)) return true; else{ if (tecla==8 || tecla==0) return true; else return false; } } </script> <html> <head> <title> Somente Nmeros </title> </head> <body> <input type='text' size='10' value='' onkeypress='return SomenteNumero(event)'> </body> </html>
Criar input text que s aceita caracteres numricos de forma flexvel e elegante
Ol pessoal. Hoje irei mostrar um exemplo de como transformar um input text em um componente que s aceita caracteres numricos de forma flexvel e elegante. O objetivo que apenas definindo a classe css do input ele assuma esta caracterstica. Logo, a idia que o cdigo fonte do input seja algo parecido com o cdigo abaixo:
view plainprint?
1.
Para elaborar este componente, ser feito o uso do jQuery verso 1.5.0. Primeiramente, crie um arquivo chamado inputNumero.html, com o cdigo fonte abaixo:
view plainprint?
1. <html> 2. <head> 3. <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5. 0/jquery.min.js"></script> 4. <script type="text/javascript" src="inputNumero.js"></script> 5. </head> 6. <body> 7. Somente numeros: 8. <input type="text" class="inputNumero" /> 9. </body> 10. </html>
Este arquivo ser usado para testar o nosso componente. Percebam que na linha 3, fazemos a referncia biblioteca jQuery v 1.5.0. Na linha seguinte, temos a referncia um arquivo chamado inputNumero.js, que ter a lgica do componente. Neste arquivo, vamos criar algumas funes. A funo abaixo, ser usada no evento onkeypress do componente.
view plainprint?
1. 2. 3. 4. 5. 6.
function somenteNumeroOnkeypress(event){ var tecla = getTeclaCrossBrowser(event); var retorno = isCharPermitido(tecla); try {event.returnValue = retorno;} catch(ex) { } return retorno; }
Basicamente chamamos uma funo para obter a tecla que foi digitada pelo usurio, e chamamos outra funo para verificar se o caractere permitido ou no (Neste exemplo, s ser aceito os caracteres de 0 9 e backspace). Abaixo segue a implementao dest as funes auxiliares:
view plainprint?
function isCharPermitido(tecla) { //podem ser incluidos mais caracteres aqui caso seja necessario.. //char de 48 a 57 correspondem de '0' a '9' //char 8 corresponde ao backspace. return (tecla >= 48 && tecla <= 57) || tecla == 8; } function getTeclaCrossBrowser(event){ var tecla = ''; if (event.which) { // Firefox tecla = event.which; } else if (event.keyCode) { // IE tecla = event.keyCode; } else if (event.charCode) { // chrome tecla = event.charCode; } return tecla; }
1. 2. 3. 4. 5.
Ela necessria para alguns casos como copiar e colar, em que o onkeypress nem sempre filtra. Agora, vamos criar a funo que ir vincular as funes aos eventos onblur e onkeypress:
view plainprint?
1. 2. 3. 4. 5. 6. 7. 8. 9.
function bindingInputNumberEvents() { //modo 1 //adicionando onkeypress $('.inputNumero').keypress(function(event) { return somenteNumeroOnkeypress( event); }); //modo 2 //adicionando onblur var array = $('.inputNumero').get();
for (var i = 0; i < array.length; i++) { var campo = array[i]; if (campo.addEventListener) {//firefox chrome etc campo.addEventListener("blur", function() { return soNumero(campo); }, false); } else if (campo.attachEvent){//ie campo.attachEvent("onblur", function() { return soNumero(campo); }); } } }
Na linha 4, temos o seletor do jQuery: $('inputNumero '). Basicamente ele filtra todos os objetos do DOM que tem a classe css 'inputNumero'. Logo depois, chamamos o mtodo keypress passando como parametro uma funo. Podemos ler o cdigo da seguinte forma: Selecione todos os objetos do DOM que usam a classe c ss inputNumero e vincule esta funo ao evento onkeypress do objeto. No onblur, apenas resolvi mostrar outra maneira (mais manual) de vincular os eventos aos componentes. Ento, criada funo bindingInputNumberEvents(), precisamos chama -la de alguma forma aps carregar a DOM. O cdigo abaixo faz exatamente isto:
view plainprint?
1. 2. 3.
1. function isCharPermitido(tecla) { 2. //podem ser incluidos mais caracteres aqui caso seja necessrio.. existem browsers que detectam alguns caracteres como direcionais, delete, tab, etc... 3. //char de 48 a 57 correspondem de '0' a '9' 4. //char 8 corresponde ao backspace. 5. return (tecla >= 48 && tecla <= 57) || tecla == 8; 6. } 7. function getTeclaCrossBrowser(event){ 8. var tecla = ''; 9. if (event.which) { // Firefox 10. tecla = event.which; 11. } else if (event.keyCode) { // IE 12. tecla = event.keyCode; 13. } else if (event.charCode) { // chrome 14. tecla = event.charCode; 15. } 16. return tecla; 17. } 18. function somenteNumeroOnkeypress(event){ 19. var tecla = getTeclaCrossBrowser(event ); 20. var retorno = isCharPermitido(tecla); 21. try {event.returnValue = retorno;} catch(ex) { } 22. return retorno; 23. } 24. //por desencargo, esta ser usada no onblur 25. function soNumero(campo){ 26. var vr = campo.value; 27. vr = vr.replace(/\D/g,""); 28. campo.value = vr; 29. } 30. 31. //adicionando os eventos nos inputs 32. function bindingInputNumberEvents() { 33. //modo 1 34. //adicionando onkeypress
35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
$('.inputNumero').keypress(function(event) { return somenteNumeroOnkeypress(event); }); //modo 2 //adicionando onblur var array = $('.inputNumero').get(); for (var i = 0; i < array.length; i++) { var campo = array[i]; if (campo.addEventListener) {//firefox chrome etc campo.addEventListener("blur", function() { return soNumero(campo); }, false); } else if (campo.attachEvent){//ie campo.attachEvent("onblur", function() { return soNumero(campo); }); } } } //quando o dom tiver carregado... $(document).ready(function(){ //adicionando eventos... bindingInputNumberEvents(); });
Podemos conferir o exemplo funcionando clicando aqui. Enfim pessoal, esta foi a minha primeira postagem e espero que tenham gostado. At mais! Referncias: http://jquery.com *Obs: Este exemplo foi testado usando um teclado pt -BR, SO Windows 7, e apenas nos browsers Google Chrome 9+, Internet Explorer 7+, Mozilla Firefox 3.6+ e Safari 5+.