Usuário com melhor resposta
event.keyCode funcionava no XP e agora não no W7

Pergunta
-
Pessoal,
Sou novo por aqui, desenvolvia em oura linguagem, agora trabalho num projeto com .Net, pretendo participar bastant por aqui. Vamos à questão.
Fiz um formulário onde em um determinada caixa de texto o usuário conseguiria digitar apenas números
dentro do page load:
txCam.Attributes.Add("onkeypress", "if (event.keyCode < 48 || event.keyCode > 58) {event.keyCode = 0;}");
Este formulário está num sistema intranet e ele sempre funcionou normalmente quando estava rodando no IIS do Windows XP, funcionando tanto no IE quanto no FF, porém usar o IIS do Windows 7, esta funcionalidade não funciona mais em nenhum browser.
Acabo de fazer outro teste, coloquei o sistema novamente num pc com windows xp e rodei localhost e a funcionalidade do código acima funciona normalmente, ao rodar ele localhost numa máquina com Windows 7 o código não funciona.
Alguém sabe me dizer o motivo?
Até cheguei a fazer uma gambiarra, que até funcionou aqui no windows 7, mas não é o que quero, fica muito sujo, quando o usuário digitar letra dá um postback:
txCam.Attributes.Add("onkeypress", "if(event.keyCode < 48 || event.keyCode > 58)__doPostBack('txCam','');");
Sinal que a sintaxe é essa mesma, ao menos até a parte txCam.Attributes.Add("onkeypress", "if(event.keyCode < 48 || event.keyCode > 58) o problema deve ser o que vem depois disso. Tentei detalhar o máximo possível meu problema.
Desde já obrigado!
Respostas
-
Corrigindo o código acima...
Deve ficar assim:
$(document).ready(function() {
$("#ID_do_meu_Elemento").keyup(function (e) {
if(e.which == 13)
alert("Cliquei no Enter");
});
});
A função $(document).ready(function() {}); Indica que o bloco de código interno só sera executado após o carregamento da página. Isso é necessário, pois se você colocar sem essa função o script executará antes da página carregar e assim não funcionará pois os elementos citados no script ainda não foram carregados.
- Editado Marcos_Marques quarta-feira, 24 de outubro de 2012 17:52 erro de código
- Marcado como Resposta Ricardo RussoModerator quarta-feira, 30 de janeiro de 2013 12:43
Todas as Respostas
-
Angelo,
Sempre que preciso de um campo que aceite apenas numero faço da seguinte forma
Crio minha função js
function validaNumero(evento) { var tecla = event.keyCode; if ((tecla == 44 || tecla == 46) || (tecla > 47 && tecla < 58)) // numeros de 0 a 9 return true; else { if (tecla != 8) // espaço event.keyCode = 0; //return false; else return true; } }
<asp:TextBox ID="txt1" runat="server" onkeypress="return validaNumero(event);" MaxLength="9"></asp:TextBox>
[]'s
Bruno Viegas D. Ribeiro
Analista Desenvolvedor de Sistemas www.brunoviegas.com.br -
Olá Bruno,
Muito obrigado pela resposta, eu fiz do jeito que você falou, mas no W7 continua sem funcionar, pela lógica o seu jeito é a mesma coisa que o meu, porém eu não crio a função, uso o javascript direto no código.
Eu testei outa possibilidade que funcionou no windows 7:
function is_int(event) {
var Key = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if (Key == 13 || (Key >= 48 && Key <= 57)) return true;
else return false;
}
</script>Em suma é o mesmo script, porém com a seguinte diferença:
var Key = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
pelo que entendi, de igualar cada tipo de evento numa mesma variável, então independente de qual evento um browser específico usa, o evento ocorrerá. Desta forma funcionou, então desfiz e tentei fazer da forma que costumo fazer, sem criar uma função, e usar o js direto no código fazendo para cada tipo de evento:
txCam.Attributes.Add("onkeypress", "if (event.keyCode < 48 || event.keyCode > 58) {event.keyCode = 0;}");
txCam.Attributes.Add("onkeypress", "if ( event.which < 48 || event.which > 58) {event.which = 0;}");
txCam.Attributes.Add("onkeypress", "if (event.charCode < 48 || event.charCode > 58) {event.charCode = 0;}");
Porém, desta forma continua sem funcionar, só que não vejo a menor lógica em não funcionar, não consigo descobrir o motivo.
Ou então usar a lógica da função que mencionei:
function is_int(event) {
var Key = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if (Key == 13 || (Key >= 48 && Key <= 57)) return true;
else return false;
}
</script>Porém sem ter que criar a função, queria fazer a lógica direto no código:
algo por exemplo, dentro do page load:
var Key = "event.keyCode ? event.keyCode : event.which ? event.which : event.charCode";
txCam.Attributes.Add("onkeypress", "if ('" + Key + "' < 48 || '" + Key + "' > 58) {'" + Key + "' = 0;}");=============
Porém não sei direito a sintaxe pra fazer de forma similar à da função sem ter que fazer a função, fazendo com js direto no código.
Por exemplo usando esses "?", ":" que nunca usei, enfim..., direto no código (.cs).
Desde já agradeço!
-
Olá,
Rapaz, se você utilizar código javascript puro sempre ocorrerá chance de não funcionar pelo browser ou windows e etc. Aconselho você utilizar "jquery", que encapsula vários métodos javascript sendo que é executado cross-browser sem nenhum problema. Essa biblioteca está muto conhecida sendo que não há mais desenvolvimento web sem utilizar essa biblioteca, visto que a parte client-side das aplicações web cada vez mais ocupa espaço na aplicação.
coloque está referência no header da página para utilizar a biblioteca jquery:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript">
</script>Aí para fazer o que você está querendo, você pode fazer assim:
Exemplo Didático:
$("#ID_do_meu_Elemento").onkeyup(function (e) {
if(e.which == 13)
alert("Cliquei no Enter");
});
Neste bloco de código, declaro o evento "onkeyup" para o meu controle especificado. E assim declaro a função que será executada quando ocorrer o evento. Digo que se a tecla clicada for "Enter" dá um alert.
-
Eu utilize e mesmo código no W7.
Qual o Pool de aplicação o seu site esta usando? eu já tive um problema com javascript e era o pool da aplicação,
eu sinceramente não conheço muito sobre configuração do IIS, mas é uma coisa que pode tentar ver
Bruno Viegas D. Ribeiro
Analista Desenvolvedor de Sistemas www.brunoviegas.com.br -
Corrigindo o código acima...
Deve ficar assim:
$(document).ready(function() {
$("#ID_do_meu_Elemento").keyup(function (e) {
if(e.which == 13)
alert("Cliquei no Enter");
});
});
A função $(document).ready(function() {}); Indica que o bloco de código interno só sera executado após o carregamento da página. Isso é necessário, pois se você colocar sem essa função o script executará antes da página carregar e assim não funcionará pois os elementos citados no script ainda não foram carregados.
- Editado Marcos_Marques quarta-feira, 24 de outubro de 2012 17:52 erro de código
- Marcado como Resposta Ricardo RussoModerator quarta-feira, 30 de janeiro de 2013 12:43
-
-