Una de las cosas
que más suelen pedir los usuarios es la rapidez a la hora de recibir sus pedidos.
Éste script ayuda al que teclea a realizar las órdenes más deprisa, sin necesidad
de pulsar el tabulador cada vez que quiera cambiar de campo.
A continuación expongo el
código que obtuve después de 'pelearme' con los navegadores para que funcionara correctamente
tanto en Netscape como en Internet Explorer:
var modificar=false;
var salto=false;
var formulario;
var foco=false;
var valor_campo="";
function Modificar(e) {
e.select();
modificar=true;
foco=true;
}
function inh_Modificar() {
if (foco==false)
modificar=false
else
foco=false;
}
function PonerValorCampo(e) {
valor_campo=e.value;
}
function ComprobarMaximoIE(form,num,longitud) {
if (navigator.appName.indexOf("Netscape")!=-1) return
if ((form.elements[num].value.length+1>=longitud) &&
!(modificar)) {
salto=num+1;
formulario=form;
}
if (modificar) {
modificar=false;
}
}
function Saltar() {
if (navigator.appName.indexOf("Netscape")==-1) {
if (salto)
formulario.elements[salto].focus();
salto=false;
}
}
function ComprobarMaximoNS(form,num,longitud) {
if (navigator.appName.indexOf("Netscape")==-1) return
if ((form.elements[num].value.length+1>=longitud) &&
!(modificar))
form.elements[num+1].focus();
if (modificar) {
modificar=false;
}
}
Las entradas para ComprobarMaximo** son:
(
this.form,
nºcampo comenzando en el 0,
tamaño maximo del campo en caracteres)
El siguiente código es un ejemplo en HTML de los formatos que se utilizan para llamar a las funciones de salto:
<input onKeyPress="ComprobarMaximoIE(this.form,0,5)"
onClick="inh_Modificar()"
onKeyUp="Saltar()"
onKeyDown="ComprobarMaximoNS(this.form,0,5);PonerValorCampo(this)"
onFocus="Modificar(this)"
type="text" size="5" maxlength="5">
<input onKeyPress="ComprobarMaximoIE(this.form,1,5)"
onClick="inh_Modificar()"
onKeyUp="Saltar()"
onKeyDown="ComprobarMaximoNS(this.form,1,5);PonerValorCampo(this)"
onFocus="Modificar(this)"
type="text" size="3"
maxlength="5">
<input onKeyPress="ComprobarMaximoIE(this.form,2,8)"
onClick="inh_Modificar()"
onKeyUp="Saltar()"
onKeyDown="ComprobarMaximoNS(this.form,2,8);PonerValorCampo(this)"
onFocus="Modificar(this)"
type="text" size="8"
maxlength="8">
<input onKeyPress="ComprobarMaximoIE(this.form,3,4)"
onClick="inh_Modificar()"
onKeyUp="Saltar()"
onKeyDown="ComprobarMaximoNS(this.form,3,4);PonerValorCampo(this)"
onFocus="Modificar(this)"
type="text" size="4"
maxlength="4">
<input type="text"
size="5" onClick="inh_Modificar()"
onFocus="Modificar(this)" maxlength="5">
Hay que poner especial hincapié en el último campo, que es distinto a los demás ya que desde
él no se salta a ningún lado. Lo siguiente es un ejemplo de ello: