Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/08/2012, 13:12
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 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.