Foros del Web » Programando para Internet » Javascript »

Hacer foco a un campo al realizarse un evento.

Estas en el tema de Hacer foco a un campo al realizarse un evento. en el foro de Javascript en Foros del Web. Hola. Les cuento el siguiente problema. Estoy validando un campo input con javascript. El código: function esDecimal(e){ var numero=window.event.srcElement.value; if (!/^[$]*[0-9]*.[0-9]*$/.test(numero)){ //Verifico que sea decimal ...
  #1 (permalink)  
Antiguo 13/08/2012, 09:22
af1
 
Fecha de Ingreso: junio-2010
Mensajes: 87
Antigüedad: 13 años, 10 meses
Puntos: 2
Hacer foco a un campo al realizarse un evento.

Hola. Les cuento el siguiente problema.

Estoy validando un campo input con javascript. El código:

function esDecimal(e){
var numero=window.event.srcElement.value;
if (!/^[$]*[0-9]*.[0-9]*$/.test(numero)){ //Verifico que sea decimal por medio de una expresión regular.
alert("El valor " + numero + " no es un número");
window.event.srcElement.focus(e);
}else{
guardarDatos(e); //envío datos por AJAX
}
}

La comprobación se hace bien. El problema que tengo quiero que se haga foco al elemento que produjo el evento. Probé con la línea "window.event.srcElement.focus(e);", pero no está funcionando.

Que opinan?

Saludos!
  #2 (permalink)  
Antiguo 13/08/2012, 11:05
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 1 mes
Puntos: 47
Respuesta: Hacer foco a un campo al realizarse un evento.

puedes agregar this.focus(); al lado del manejador de eventos del input que usas x ej:

<input type="text" onblur="esDecimal(); this.focus();">

aunque no llego a entender bien como llamas tu funcion, prueba como lo has escrito pero sin pasarle el parametro e aver si te funciona, supongo que si para recuperar el valor usas window.event.srcElement.value y te funciona bien tambien puedes usar window.event.srcElement.focus(); y no deberia tener problemas.

Saludos!
  #3 (permalink)  
Antiguo 13/08/2012, 13:12
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Hacer foco a un campo al realizarse un evento.

Cita:
Iniciado por af1 Ver Mensaje
Hola. Les cuento el siguiente problema.

Estoy validando un campo input con javascript. El código:

function esDecimal(e){
var numero=window.event.srcElement.value;
if (!/^[$]*[0-9]*.[0-9]*$/.test(numero)){ //Verifico que sea decimal por medio de una expresión regular.
alert("El valor " + numero + " no es un número");
window.event.srcElement.focus(e);
}else{
guardarDatos(e); //envío datos por AJAX
}
}

La comprobación se hace bien. El problema que tengo quiero que se haga foco al elemento que produjo el evento. Probé con la línea "window.event.srcElement.focus(e);", pero no está funcionando.

Que opinan?

Saludos!
En primer lugar, tu expresión regular no es correcta (5x5 --> validaría)
En segundo si estás validadndo un input, no sé por que te complicás con
var numero=window.event.srcElement.value;
Te aconsejo esto:
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.  
  7. <script type="text/javascript">
  8. //<![CDATA[
  9. function esDecimal(){
  10. var numero=document.getElementById('precio');
  11. if((!validarNumero(numero.value))||(numero.value == "")){
  12. numero.value="";
  13. numero.style.backgroundColor = 'red';
  14. numero.focus();
  15. alert("El valor " + numero.value + " no es un número");
  16. return false;
  17. }else{
  18. // aquí decidís que es lo que querés pasar
  19. var valor = parseFloat(numero.value);
  20. alert('Con redondeo: ' + parseFloat(valor).toFixed(2));
  21. var a = Math.floor(valor * 100) / 100;
  22. alert('Sin redondeo 2 decimales: ' + a.toFixed(2));
  23. alert('Numero completo: ' + valor);
  24.  
  25. //guardarDatos(numero); //envío datos por AJAX
  26. }
  27. }
  28. // funcón para validar enteros o flotantes
  29. function validarNumero(input){
  30. return (!isNaN(input)&&parseInt(input)==input)||(!isNaN(input)&&parseFloat(input)==input);
  31. }
  32.  
  33. //]]>
  34. </head>
  35. <form action="#" onsubmit="return esDecimal()">
  36. <input type="text" id="precio" name="precio" value="" /><br /><br />
  37. <input type="submit" value="procesar" /><br /><br />
  38. </form>
  39. </body>
  40. </html>

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #4 (permalink)  
Antiguo 14/08/2012, 05:55
af1
 
Fecha de Ingreso: junio-2010
Mensajes: 87
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Hacer foco a un campo al realizarse un evento.

Gracias gente. Probé con "5x5" y si, pasa. Voy a revisar el código que me pasaste y ver como reemplazarlo.

Por ahora sigo sin poder hacer foco. Escribo el código que tengo.

En PHP tengo una serie de input dentro de filas en una tabla:

Código PHP:
print "<tr>
            
                <td class='celda_izquierda' id='hora_comuenzo'>$hora_comienzo</td>
                <td class='celda_interior'  id='duracion_corte'>$duracion_corte</td>
                <td class='celda_interior'><input $solo_lectura name='numero_reclamo-$id_corte' class='oculto' type='text' value='$numero_reclamo'></input></td>
                <td class='celda_interior'><input $solo_lectura name='costo_equipos_daniados-$id_corte' class='oculto' type='text' value='$$costo_equipo' ></input></td>
                <td class='celda_interior'><input $solo_lectura name='costo_perdidas_materiales-$id_corte' class='oculto' type='text' value='$$perdidas_materiales'></input></td>
                <td class='celda_interior'><input $solo_lectura name='costo_perdidas_mano_obra-$id_corte' class='oculto' type='text' value='$$perdidas_mano_obra'></input></td>
                <td class='observaciones'><textarea $solo_lectura name='observaciones-$id_corte' class='oculto' value='' rows='1' cols='100'>$observaciones</textarea></td>
            </tr>"



Después. Con javascript inicializo el evento:
Código Javascript:
Ver original
  1. addEvent(vec[f],'change',esDecimal,false);


Y después verifico con la función.
Código Javascript:
Ver original
  1. function esDecimal(e){
  2.     var numero=window.event.srcElement.value;
  3.     if (!/^[$]*[0-9]*.[0-9]*$/.test(numero)){
  4.         alert("El valor " + numero + " no es un número");
  5.         window.event.srcElement.focus();
  6.     }else{
  7.         guardarDatos(e); //envío datos por AJAX
  8.     }
  9.  }


Como envío los datos por ajax no tengo una etiqueta "<form>" que envuelva a los input, entonces puede ser que no se pueda hacer foco por este motivo?...

Saludos!

Etiquetas: ajax, foco, funcion, input, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:18.