el hecho de que te acepta alfanumericos se debe a que no estas
limpiando el contenido del campo. cuando digo
limpiar me refiero a cualquier forma de obligar al usuario de introducir un valor correcto. por ejemplo, vaciando el contenido del campo asignando un string vacio a la propiedad value. como ya se te ha sugerido, conviene mejor que leas acerca de las expresiones regulares. un material por el que puedes comenzar,
http://javascript.espaciolatino.com/...pregulares.htm, y puedes encontrar muchos mas con los terminos
javascript expresiones regulares.
solo con el proposito de ponerte en el camino para que puedas continuar. un ejemplo de una expresion regular para validar el campo de la hora.
Código:
var validHour = /^([01]?\d|2[0-3]):[0-5]\d$/;
// ejemplo de uso;
var hour = "20:53";
alert(validHour.test(hour));
var hour = "09:73"; // 73 minutos;
alert(validHour.test(hour));
en este caso se utiliza el metodo
test para comprobar la expresion con un string. este devuelve un boolean donde true indica que la expresion encontro un pareo con el patron dado, y falso pues lo contrario. en este caso, se puede traducir que true nos indica que el string es valido, y false para un string no valido.