[RESOLVIDO] Javascript: somente numeros

Alguem sabe como faço para permitir somente numeros num campo de texto proibindo o copiar do botão direito do mouse?

ja fiz para que o campo so aceite numeros e que nao permita copiar com CRTL + V. Porém ele aceita copiar texto se eu clicar com o botao direito no campo e clicar em colar.

alguem sabe como fazer para nao deixar colar texto neste campo com o botao direito do mouse?

IMPORTANTE!!! -> SEM BLOQUEAR O BOTAO DIREITO!

No IE, os elementos possuem uma proprieade chamada onpropertychange, através da qual você pode monitorar as propriedades de um objeto.

No Firefox, os objetos possuem uma função watch, que basicamente possui a mesma funcionalidade.

Provavelmente outros browsers implementam funcionalidades semelhantes (ou até as mesmas).

Baseado nesse tipo de funcionalidade fica simples fazer um filtro de conteúdo no campo.

Alguem tem algum exemplo? Não achei nenhum.

bah!
soluções do tipo código especificos de navegadores não são as formas mais seguras, pois usuario é usuario e nunca é previsivel…
… atualizações de navegadores são mais imprevistas ainda, o que pode te gerar uma dor de cabeça com manuteçoes futuras…

… o uso de eventos nativos dos padroes html são mais garantidos

uma sugestão é aplicar uma validação dos campos por onBlur (quando por qualquer motivo existe a saida do cursor do campo)
nesta validação tu testa, se tiver algum caractere não numeral (fácil de testar com expressão regular) executa determinado procedimento (apaga campo, apaga somente os caracteres, informa o erro ao usuario, etc…)

qualquer coisa solta o grito rapaz!
até mais
:wink:

tucano, nem sempre os “eventos nativos dos padroes html” oferecem toda funcionalidade que você precisa.

Para isto existem bibliotecas javascripts (como jquery).

O evento onblur, por exemplo, é disparado quando o campo perde o foco… mas se o usuário fizer submit sem sair do campo (dando um enter) ele não será disparado.

O evento onchange seria mais apropriado neste caso, porém nem sempre ele é disparado quando os valores são alterados via script (ou no load da página).

As funções que citei não possuem essas falhas e talvez tenham sido criadas justamente por que os eventos nativos não eram suficientes.

o jquery (entre outros) tem uma série ferramentas prontas sim e muito úteis por sinal…

o bom dele é a ampla compatibilidade entre os navegadores, é uma mão na roda!

diferente dos comandos adicionais próprios dos navegadores, estes deixam sistemas duros e com uma certa chance de dar dor de cabeça com a atualização de algum navegador… (não digo que vai dar, mas é mais propício)

AbelBueno, fiquei curioso agora cara…
… qual evento você usa pra fazer o submit com o enter?
sem usar os eventos onkeypress/onkeyup/onkeydown? vc usa algum próprio do jquery?

onchange não é um evento confiável para a maioria dos casos, pois é um evento que é ativado quando o valor do campo quando perde o foco é diferente do valor do campo quando este recebeu o foco. Qualquer processo que automatize o preenchimento do campo onde ele não receba o foco não o acionará…

não digo que não funcione aqueles comandos, mas são mais propicios de darem dor de cabeça, devido eles serem específicos dos navegadores…
… é falha do analista endurecer um sistema web a uso restrito de navegadores, havendo uma vasta possibilidades de uso…

a 2 anos atras…
…o IE era o navegador mais utilizado 70% (por ai ±) e hoje já é pelos 45%
…o chrome era pouco conhecido para muitos usuarios, hoje os principais navegadores se modelaram até a um visual semelhante…
atualmente os navegadores recebem constantemente atualizações de cooreções, ajustes, etc…
quando ve daqui a algum tempo exista outro navegador, pra atormentar a vida com uma atualização…
:slight_smile:

flw galera!
até mais!!
:wink:

[quote=tucano]o jquery (entre outros) tem uma série ferramentas prontas sim e muito úteis por sinal…

o bom dele é a ampla compatibilidade entre os navegadores, é uma mão na roda!

diferente dos comandos adicionais próprios dos navegadores, estes deixam sistemas duros e com uma certa chance de dar dor de cabeça com a atualização de algum navegador… (não digo que vai dar, mas é mais propício)
[/quote]

Mas o que o jquery faz é justamente encapsular as diferenças entre browsers para você… Ele cria uma interface comum que pode utilizar extensões de navegadores para alcançar aquele resultado.

Aliás, mesmo sem usar jquery, é a mesma filosofia que utilizaria em seu javascript: encapsular as extensões em funções únicas.
Ao mudar alguma coisa em browser você alteraria em apenas um lugar.

[quote=tucano]
AbelBueno, fiquei curioso agora cara…
… qual evento você usa pra fazer o submit com o enter?[/quote]

Num formulário que tenha um input submit, se der Enter em qualquer input text, ele efetua submit. Puro html mesmo.

É por isso que eu não utilizo o onchange…

[quote=tucano]
não digo que não funcione aqueles comandos, mas são mais propicios de darem dor de cabeça, devido eles serem específicos dos navegadores…
… é falha do analista endurecer um sistema web a uso restrito de navegadores, havendo uma vasta possibilidades de uso…[/quote]

A falha não estar em usar…mas sim em COMO usar…
Ao utilizar jquery por exemplo, você está apenas deixando este problema para outra pessoa se preocupar.

Se for utilizar javascript puro, você pode simplesmente encapsular o que muda em funções específicas…
Se surgir problemas com novos navegadores, terá uma manuntenção mínima

Uma outra questão importante ,na minha opinião, é que javascript não faz realmente validação de dados, é só conforto para o usuário.
Se colocar validações no onblur, o usuário só saberá que tem algo errado quando mudar de campo.
Ou seja, ele sempre precisará voltar para um campo que já tinha terminado de preencher para se corrigir.
Do ponto de vista usabilidade, acho muito mais válido o feedback ser instantâneo.

A unica solução que encontrei foi utilizar msm o jQuery. Fiz modificacoes num plugin e acabei criando algo como um evento “onInput” que executa alguma coisa ao entrar com dados em um inputText incluindo ao utilizar crtr+v ou copiar do botao direito do mouse. Criei uma funçao para ser executada ao digitar ou colar alguma coisa neste inputText fazendo-o ignorar tudo que não for um número. Assim se alguem tentar colar ‘1a2b3c’ ele vai colar apenas 123. Ainda não terminei de customiza-lo, queria deixar de forma mais dinamica, mas a principio ja atende o que eu precisava.

Vlw a todos pelas respostas. Obrigado!