Primero nos descargamos las librerías necesarias,
1. JQuery
2. Masked Input Plugin (librerias del plugin para jquery).
Creamos una página HTML para probar el ejemplo (lo más sencillo posible).
Incluimos las librerías :
<script type="text/javascript" src="includes/jquery.js"></script> <script type="text/javascript" src="includes/jquery.maskedinput.js"></script>
agregamos un input :
<input type="text" id="time">
y agregamos nuestro script , donde estamos generando nuestras propias definiciones,
esto porque el pluging solo cuenta con 3 definiciones.
- 9 – para números del 0-9
- a – para letras de la A-Z y a-z
- * – para alfanuméricos
jQuery(function($) { $.mask.definitions['H']='[012]'; $.mask.definitions['N']='[012345]'; $.mask.definitions['n']='[0123456789]'; $("#time").mask("Hn:Nn:Nn"); });
Solo que en este caso no estaría , totalmente validada porque se podriá dar el caso de una hora (24:50:10 ó 25:00:00) y eso no es correcto ! 🙂
Para solucionar esto se hace una función con la que se valida que sea correcta y la colocamos en el onblur del input.
<input type="text" id="time" onblur="valida(this.value);">
y la función seriá como esta.
function valida(valor) { //que no existan elementos sin escribir if(valor.indexOf("_") == -1) { var hora = valor.split(":")[0]; if(parseInt(hora) > 23 ) { $("#time").val(""); } } }
y Listo 😀
el código del ejemplo esta en esta LIGA por si desean descargarla.
no conosco mucho de jquery y javascritp, pero en esta parte del codigo » var hora = valor.split(«:»)[0]; » cuando el split(«:») lo juntas con [0] que es lo que haces, cual es objetivo, para que haces eso ?.
gracias de antemano.
bueno mira.
el formato de la mascara hora es HH:MM:SS , Horas , minutos y Segundos
al hacer esto «var hora = valor.split(«:») » me retorna un arreglo con las partes en que fue partida la cadena y para no tener que hacer esto
var datos = valor.split(":"); //datos[0] = HH,datos[1] = MM y datos[2] = SS
var hora = datos[0];
lo simplifico en una linea.
var hora = valor.split(":")[0];
y la hora la obtengo para validar que no se pueda poner una hora asi 24:10:50
Saludos!! y espero haber resuelto tu duda. de no ser asi escribe por aqui para estar en contacto.
ahora si ya lo entendi, muchas gracias
Muy interesante, pero porque el input me permite ingresar la siguiente hora: 29:00:00?
Que tal!
mira pues el ejemplo funciona bien lo acabo de probar. Tal vez hiciste lo que yo ahora que lo probe ejecutaste el html desde el zip y pues no me funciono.
pero ya descomprimido funciona correctamente y si te deja ingresar esta hora : 29:00:00 pero al cambiar el foco del input lo borra porque es erronea.
Espero y eso sea el error,de cualquier forma escribe por aqui y seguimos en contacto.
Ya veo, acabo de probarlo y si me parece que esta bien, pero me gustaría que así como el campo de minutos no me permite ingresar mayor a 59 miutos, asi sea tambien el campo de hora, que no me permita ingresar mayor a 12 o 23, sin necesidad de cambiar el foco, sería genial no crees?
pues si, eso seria muy bueno , pero si lo analizas bien , es un poco dificil, porque el usuario puede escribir el 2 en el primero lugar, solo si el segundo es menor que 4.
lo que nos lleva a que la validacion se tiene que hacer despues de que es insertado el segundo, y esto se tiene que hacer o con el evento keypress o el onblur para validar. y seria algo muy parecido a lo que se esta haciendo.
En resumen, sí se puede hacer la validación, pero no con la mascara en si, se tiene que usar código para hacerla.
Saludos.
Hola,
Me parece muy interesante, sólo tengo una pequeña duda. ¿Como le quito a un elemento la mascara?
He probado a pasarle una cadena vacía. Pero esto hace que no deje introducir ningún carácter.
Un saludo
Me funciono excleentemente, muchas gracias
esta muy bien pero si yo quiero que poner una mascara 9,999.99 y si solo se captura 455.52, eso es valido, pero el plugin lo toma como invalido y por lo tanto lo borra, si alguien sabe como corregir eso ó si ya esta corregido les encargo que me avisen, GRACIAS.
Para poner la maskara de horas y minutos y que no sobrepase los valores validos…
jQuery(function($){
$.mask.definitions[‘H’]='[012]’;
$.mask.definitions[‘N’]='[012345]’;
$.mask.definitions[‘z’]='[01234]’;
$.mask.definitions[‘n’]='[0123456789]’;
$(«#data»).mask(«Hz:Nn»,{placeholder:» «});
});
es decir tu defines los valores validos con definitions en la mascara.
Saludos
Bien!
Gracias por el aporte , sin duda una manera mas sencilla.
Saludos.
pero si ingresas una hora como 19:00 hrs no te permite poner el 9, se necesita otra mascara mejor definida
una consulta por favor, una ves escrito la fecha en la caja de texto presiono enter y luego me hace postbak, como puedo evitar el postbak ?
Que tal , mira puedes evitarlo usando una validación de la tecla de Enter , con esta función javascript :
y en la caja de texto , la mandas llamar en el evento onkeypress asi :
Espero y te sirva , este ejemplo lo tome de esta liga :
http://www.forosdelweb.com/f13/evitar-submit-tecla-enter-formulario-con-solo-campo-303479/
Saludos !!!!
gracias, me sirvo la sulucion que me distes
Hola yo agregue para que reciba am/pm, es mi humilde aporte 🙂
y en la funcion que verifica:
saludos, y espero ayudar.
Hola, me equivoque al poner el codigo, disculpame, borra el anterior post
y la funcion:
saludos.
Gracias !!!
hola para los que quieren validar el tiempo (horas y minutos) lo hice de esta manera y me funciono a la perfeccion
$.mask.definitions[‘H’] = ‘[012]’;
$.mask.definitions[‘a’] = ‘[0123]’;
$.mask.definitions[‘N’] = ‘[012345]’;
$.mask.definitions[‘b’] = ‘[0123456789]’;
$(«#ctl00_ContentPlaceHolder1_gvLecturaGPS_ctl02_txtValor_p7_v7_f1»).mask(«Ha:Nb») $(«#ctl00_ContentPlaceHolder1_gvLecturaGPS_ctl03_txtValor_p7_v7_f1»).mask(«Ha:Nb»);
$(«#»).mask(«Ha:Nb»);
$(document).ready(function () {
$.mask.definitions[‘H’] = ‘[012]’;
$.mask.definitions[‘h’] = ‘[0123]’;
$.mask.definitions[‘M’] = ‘[012345]’;
$.mask.definitions[‘m’] = ‘[0123456789]’;
$(‘#’ + » + ‘_lista tbody tr td input:text’).each(function () {
$(‘#’ + this.id).mask(«Hh:Mm»);
});
});
excelente los aportes realizados… se agradece un 7
Hola, gracias por el aporte pero no entiendo esta parte, si lo explicaras un poco, gracias
$(“#ctl00_ContentPlaceHolder1_gvLecturaGPS_ctl02_txtValor_p7_v7_f1″).mask(“Ha:Nb”) $(“#ctl00_ContentPlaceHolder1_gvLecturaGPS_ctl03_txtValor_p7_v7_f1″).mask(“Ha:Nb”);
A lo que se refiere es a las definiciones… esas 2 lineas no sirven para tu aplicación.
Un ejemplo más claro sería:
jQuery(function($)
{
$.mask.definitions[‘H’] = ‘[012]’;
$.mask.definitions[‘a’] = ‘[0123]’;
$.mask.definitions[‘N’] = ‘[012345]’;
$.mask.definitions[‘b’] = ‘[0123456789]’;
$(«#time»).mask(«Ha:Nb»);
});
entonces no podrás colocar una hora con 24, ya que se supone que 24:00, corresponde a 00:00, entonces las definiciones solo te dejan colocar 23:59 y luego 00:00
pero no sirve por que no puedes colocar horas como 15:00 !