Foros del Web » Programando para Internet » Javascript »

Hacer focus a un campo de un formulario

Estas en el tema de Hacer focus a un campo de un formulario en el foro de Javascript en Foros del Web. Hola, mi duda es la siguiente, yo tengo un formulario html y le hago validación con dreamweaver, hasta ahí normal, esta validación me muestra un ...
  #1 (permalink)  
Antiguo 25/09/2010, 17:38
 
Fecha de Ingreso: junio-2010
Ubicación: Medellín
Mensajes: 12
Antigüedad: 13 años, 10 meses
Puntos: 0
Hacer focus a un campo de un formulario

Hola, mi duda es la siguiente, yo tengo un formulario html y le hago validación con dreamweaver, hasta ahí normal, esta validación me muestra un mensaje cuando un campo no tiene lo requerido, pero no me lleva al campo donde esta el error asi que yo le incluí al codigo una linea para que me lleve al campo donde esta el error:

Código:
function MM_validateForm() { //v4.0
  if (document.getElementById){
    var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
    for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=document.getElementById(args[i]);
      if (val) { nm=val.name; if ((val=val.value)!="") {
        if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
          if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
        } else if (test!='R') { num = parseFloat(val);
          if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
          if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
            min=test.substring(8,p); max=test.substring(p+1);
            if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
      } } } else if (test.charAt(0) == 'R'){ errors += '- '+nm+' Este campo es requerido.\n';
	  document.form_r.NO_SE_QUE_PONER.focus();} }
    } if (errors) alert('El siguiente error ha ocurrido:\n'+errors);
    document.MM_returnValue = (errors == '');
} }
No se como poner en la instrucción el nombre del campo a donde debe enfocarse, donde dice NO_SE_QUE_PONER.
Si pongo el nombre de un campo si funciona pero solo con ese campo.
  #2 (permalink)  
Antiguo 26/09/2010, 06:17
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Hacer focus a un campo de un formulario

Hola

Te voy a ser sincero. Probablemente nadie, por no decir que seguro, te ayudará con esa función. No hay dios quien la entienda. De cualquier modo lo que hace esa función es ir concatenando los errores y al final de la instrucción evalúa la variable errors

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #3 (permalink)  
Antiguo 26/09/2010, 09:14
 
Fecha de Ingreso: junio-2010
Ubicación: Medellín
Mensajes: 12
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Hacer focus a un campo de un formulario

En realidad lo unico que necesito saber es como en esta instruccion poner una variable que lleve el nombre del objeto del formulario: document.form_r.Variable.focus()

Soy muy novato con javascript y no se como hacer esto de forma dinamica, o sea que normalmente tengo que poner donde esta Variable el nombre del objeto para que me funcione.
  #4 (permalink)  
Antiguo 26/09/2010, 12:35
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Hacer focus a un campo de un formulario

Hola

He revisado el código y no tienes posibilidad de hacerlo. Lee este articulo, te ayudará

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #5 (permalink)  
Antiguo 26/09/2010, 18:42
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Hacer focus a un campo de un formulario

puedes usar la sintaxis de objetos como array asociativo y en este incluyes la variable nm el cual contiene el nombre del campo en evaluacion. si tienes duda sobre array asociativos, http://www.quirksmode.org/js/associative.html. la seccion que te debe interesar es la subtitulada como Associative Arrays. si no te aclara, busca por terminos associative object o square brackets notation. en este otro tema se expone un ejemplo, http://www.forosdelweb.com/showthread.php?p=2912773 aplicado a los formularios. en este otro tema encuentras mas enlaces, http://www.forosdelweb.com/showthread.php?p=3393939.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 26/09/2010 a las 19:02
  #6 (permalink)  
Antiguo 27/09/2010, 04:33
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Hacer focus a un campo de un formulario

Cita:
Iniciado por zerokilled Ver Mensaje
puedes usar la sintaxis de objetos como array asociativo y en este incluyes la variable nm el cual contiene el nombre del campo en evaluacion. si tienes duda sobre array asociativos, http://www.quirksmode.org/js/associative.html. la seccion que te debe interesar es la subtitulada como Associative Arrays. si no te aclara, busca por terminos associative object o square brackets notation. en este otro tema se expone un ejemplo, http://www.forosdelweb.com/showthread.php?p=2912773 aplicado a los formularios. en este otro tema encuentras mas enlaces, http://www.forosdelweb.com/showthread.php?p=3393939.
Por lo que he entendido en la función que nos presenta, ha de validar varios campos y al final presenta un log de errores. Entonces ¿como va a darle el foco a esos campos? o ¿tu intención es que se lo de al primer campo en el que ha habido error? No sé, uno de los dos no ha interpretado bien la función, me inclino a que soy yo
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #7 (permalink)  
Antiguo 27/09/2010, 09:29
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Hacer focus a un campo de un formulario

Cita:
No sé, uno de los dos no ha interpretado bien la función, me inclino a que soy yo.
no pues, la has interpretado bien, solo que parcialmente. ciertamente la función genera un reporte de errores. sin embargo, la función parece ser confusa al principio. por ejemplo, de alguna forma el código da a entender que se valida más de un campo pero si analizas el bucle verás que no. la función admite tres argumentos:
  1. el campo a validar
  2. se desconoce puesto que en código no se utiliza
  3. condiciones de validación... es decir, si es un campo requerido, validación de email, o rango numérico.
ahora bien, fijate en el control del bucle dice lontigud menos dos. no tiene consistencia si fuera validar más de un campo en una sola invocación; tendría que haber divido entre tres en lugar de restar dos. si fuera el caso de validar más de un campo, entonces el foco lo recibiría siempre el último campo validado independientemente si validó bien o no -otra inconsistencia-. en conclusión, de por si el bucle esta de más y me parece que esa es la fuente de la confusión. incluso a mi me confundio.

edit: yo soy el confudido lo tachado son mis horrores de analisis mental.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 27/09/2010 a las 11:19
  #8 (permalink)  
Antiguo 27/09/2010, 10:56
 
Fecha de Ingreso: junio-2010
Ubicación: Medellín
Mensajes: 12
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Hacer focus a un campo de un formulario

la funcion incluye varias validaciones pero solo para objetos tipo text y objetos tipo text area, tambien me di cuenta que el presenta un reporte de errores y como yo lo exponia me hiba a hacer focus al abjeto evaluado si se presentaba un error pero el focus quedaira en el ultimo objteto donde encontro error.

La verdad queria saber era como, segun el campo en el que se estuviera evaluando me hiciera un set focus a ese campo, teniendo en canta que esta dentro de un ciclo.

Voy a revisar lo que me sugirió zerokilled y les cuento como me fué y si me queda bien les muestro como quedó la función.

Muchas gracias por sus respuestas
  #9 (permalink)  
Antiguo 27/09/2010, 11:13
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Hacer focus a un campo de un formulario

Cita:
por ejemplo, de alguna forma el código da a entender que se valida más de un campo pero si analizas el bucle verás que no.

ahora bien, fijate en el control del bucle dice lontigud menos dos. no tiene consistencia si fuera validar más de un campo en una sola invocación; tendría que haber divido entre tres en lugar de restar dos.
por favor, ignoren lo citado, lo descarto... segui analizando el código y viendo algunos ejemplos en la web. me he fijado que la funcion esta diseñada para validar varios campos y no uno como yo pensaba. estabas en lo correcto, Adler . lo que si, la función posiciona el foco en el último campo con error.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #10 (permalink)  
Antiguo 27/09/2010, 11:51
 
Fecha de Ingreso: junio-2010
Ubicación: Medellín
Mensajes: 12
Antigüedad: 13 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Hacer focus a un campo de un formulario

Listo, ya encontré la solución. He aquí el código:

Código:
function MM_validateForm() { //v4.0
  if (document.getElementById){
    var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
    for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=document.getElementById(args[i]);
      if (val) { nm=val.name; if ((val=val.value)!="") {
        if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
          if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
        } else if (test!='R') { num = parseFloat(val);
          if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
          if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
            min=test.substring(8,p); max=test.substring(p+1);
            if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
      } } } else if (test.charAt(0) == 'R'){ errors += '- '+nm+' Este campo es requerido.\n';
	  document.forms["form"].elements[nm].focus(); break;} }
    } if (errors) alert('El siguiente error ha ocurrido:\n'+errors);
    document.MM_returnValue = (errors == '');
} }
Con esto me va mostrando uno a uno los errores y me hace foco donde esta cada error.

Lo que necesitaba era esto: document.forms["form"].elements[nm].focus();
donde form es el nombre del formulario y en nm esta el nombre del campo evaluado.

Muchas gracias por sus orientaciones
  #11 (permalink)  
Antiguo 27/09/2010, 12:24
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Hacer focus a un campo de un formulario

Cita:
Iniciado por zerokilled Ver Mensaje
la función posiciona el foco en el último campo con error.
Toda la razón, es pura lógica. No sé por que pensé que se situaría en el primero
Cita:
Iniciado por plastim Ver Mensaje
Lo que necesitaba era esto: document.forms["form"].elements[nm].focus();
donde form es el nombre del formulario y en nm esta el nombre del campo evaluado.
Te falto mencionar que también usaste un break
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #12 (permalink)  
Antiguo 27/09/2010, 15:41
 
Fecha de Ingreso: junio-2010
Ubicación: Medellín
Mensajes: 12
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Hacer focus a un campo de un formulario

También me faltó decir como llamaba la función.
En este enlace fue donde encontré como validar con DW pero yo le quería agregar la parte de los focus y el break; para tener mas control en un formulario extenso.

http://www.webexperto.com/articulos/art/218/validar-formularios-con-dreamweaver/

Cabe recordar que solo sirve para input's tipo text y para text area.

Última edición por plastim; 27/09/2010 a las 16:08

Etiquetas: focus
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 10:56.