Cita:
Iniciado por majo_83
Funciona perfecto, solo que use alert para mostrar los mensajes, ya que si lo dejaba con document.getElementById('mensaje').innerHTML al colocar la función en un formulario de varios campos como el que estoy manejando no me muestra nada. El tema es que si o si el usuario usa el tabulador para ir moviendo el cursor dentro del formulario y cuando llega al campo al que le aplico la función muestra el mensaje(alert) antes de escribir nada.
Tengo alguna manera de solucionar esto??
Gracias...

Cita:
Iniciado por majo_83
También pasa que cuando apretó, por ejemplos, la tecla del n°8 ya me pone el alert de que no es un valor permitido y en realidad debería dejarme ingresar por ej. 81,82…
Te tiene que funcionar de las dos maneras, mezclar onkeyup con alerts no te lo recomiendo. Con lo del tabulador, a lo hecho hay que sumar la deteccción de la tecla
probá esto
Código HTML:
Ver original<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <script type="text/javascript"> //<![CDATA[
function validar(campo,e){
var elcampo = document.getElementById(campo);
e = (e) ? e : ((event) ? event : null);
var version = (e.target) ? e.target : ((e.srcElement)?e.srcElement : null );
var teclaNum = e.keyCode;
if(teclaNum != 9){
if((!validarNumero(elcampo.value))||(elcampo.value == "")){
elcampo.value = "";
elcampo.focus();
document.getElementById('mensaje').innerHTML = 'Debe ingresar un número';
}else{
document.getElementById('mensaje').innerHTML = '';
// Aqui pones el resto de las condiciones usando comparadores u operadores aritméticos, ya que estás seguro de que trabajas con números
if ((elcampo.value < 80) || (elcampo.value > 190)){
document.getElementById('mensaje').innerHTML = 'valor no permitido';
}else{
document.getElementById('mensaje').innerHTML = '';
}
} // fin valida num
} // fin detectar tecla
} // fin función
function validarNumero(input){
return (!isNaN(input)&&parseInt(input)==input)||(!isNaN(input)&&parseFloat(input)==input);
}
//]]>
texto
<input type="text" id="nombre" name="nombre" value="" /><br />número rango
<input type="text" id="precio" name="precio" value="" onkeyup="validar(this.id,event);" /><br />número rango
<input type="text" id="precio2" name="precio2" value="" onkeyup="validar(this.id,event);" /><br /><input type="submit" value="procesar" /><br /><br />
funciona correctamente y hay tres campos (en 2 se valida en otro no) y te acepta números enteros como flotantes
Y por favor para otros posts, indicá concretamente cuantos campos hay, si deben validar todos o no etc, ya que esto resulta en respuestas completamente diferentes
Saludos