Foros del Web » Programando para Internet » Javascript »

Rutina para saltar con ENTER

Estas en el tema de Rutina para saltar con ENTER en el foro de Javascript en Foros del Web. Buenos días, vengo a retomar un post que en su momento utilicé y hasta el día de hoy no había tenido ningún problema. [URL="http://www.forosdelweb.com/f13/rutina-para-saltar-campos-con-enter-266875/"]http://www.forosdelweb.com/f13/rutina-para-saltar-campos-con-enter-266875/ [/URL] ...
  #1 (permalink)  
Antiguo 18/10/2018, 16:47
 
Fecha de Ingreso: abril-2012
Mensajes: 28
Antigüedad: 6 años, 7 meses
Puntos: 0
Rutina para saltar con ENTER

Buenos días, vengo a retomar un post que en su momento utilicé y hasta el día de hoy no había tenido ningún problema.

[URL="http://www.forosdelweb.com/f13/rutina-para-saltar-campos-con-enter-266875/"]http://www.forosdelweb.com/f13/rutina-para-saltar-campos-con-enter-266875/
[/URL]
Pero siempre hay algo que hay para mejorar y la verdad ya no encuentro solución.

Cuando utilizo esa rutina para ir saltando de campo en campo con ENTER y no con TAB me pasa que para un input que ya tiene un value predeterminado, el cursor me queda por delante del texto y sin seleccionar, a diferencia del TAB que ya me queda seleccionado el valor.

Código HTML:
<input type="text" name="descripcion" id="descripcion" onkeypress="return tabular(event,this)">
<input name="cantidad" type="number" id="cantidad" onKeyPress="return tabular(event,this)" value="1"  /> 
El problema que tengo es que si vengo tabulando con la función "tabular" (de descripcion a cantidad), cuando hace foco en el input cantidad, me queda el cursor delante del 1, y el usuario si necesita poner cantidad 2 por ejemplo, escribe el 2 y queda 21.... en cambio si vengo tabulando con TAB, queda seleccionado el 1 y si el usuario escribe 2, reemplaza el 1 por el 2...

¿Alguna sugerencia?
Desde ya muchas gracias!!


Dejo la función por las dudas

Código HTML:
function tabular(e,obj)  
{ 
  tecla=(document.all) ? e.keyCode : e.which; 
            if(tecla!=13) return; 
			if(e.shiftKey == true) return;
            frm=obj.form; 
            for(i=0;i<frm.elements.length;i++)  
                if(frm.elements[i]==obj)  
                {  
                    if (i==frm.elements.length-1)  
                        i=-1; 
                    break  
                } 
    /*ACA ESTA EL CAMBIO disabled, Y PARA SALTEAR CAMPOS HIDDEN*/ 
            if ((frm.elements[i+1].disabled ==true) || (frm.elements[i+1].type=='hidden') )     
                tabular(e,frm.elements[i+1]); 
/*ACA ESTA EL CAMBIO readOnly */ 
            else if (frm.elements[i+1].readOnly ==true )     
                tabular(e,frm.elements[i+1]); 
            else { 
                if (frm.elements[i+1].type=='text') /*VALIDA SI EL CAMPO ES TEXTO*/ 
                { frm.elements[i+1].select(); };   /* AÑADIR LOS CORCHETES Y ESTA INSTRUCCION */ 
                frm.elements[i+1].focus(); 
            } 
            return false;  
}
  #2 (permalink)  
Antiguo 13/12/2018, 09:19
Avatar de dAvidcA  
Fecha de Ingreso: septiembre-2009
Ubicación: /home/dev/
Mensajes: 71
Antigüedad: 9 años, 3 meses
Puntos: 7
Respuesta: Rutina para saltar con ENTER

Hola, tal vez llego tarde, pero hace mucho no me conectaba. De igual forma hice este código más simple y funcional:

Código Javascript:
Ver original
  1. function tabular(e,obj)  
  2. {
  3.     tecla=(document.all) ? e.keyCode : e.which;
  4.     if(tecla!=13) return;
  5.     focusSiguiente(e.target.nextSibling);
  6.    
  7.     e.preventDefault();
  8.     return false;
  9. }
  10.  
  11. function focusSiguiente(sibling){
  12.     if (sibling === undefined) return; 
  13.    
  14.     let objSib = sibling.nextSibling;
  15.     if (objSib.readOnly || objSib.hidden || objSib.disabled){
  16.         focusSiguiente(objSib.nextSibling);
  17.         return;
  18.     }  
  19.     objSib.focus();
  20.     objSib.setSelectionRange(0, objSib.value.length);
  21. }

Saludos.



La zona horaria es GMT -6. Ahora son las 13:15.