Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] dataset con childNodes

Estas en el tema de dataset con childNodes en el foro de Javascript en Foros del Web. Buenas, sólo me preguntaba porqué así el código funciona: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original var form = $ ( "formulario_" + formulario ) ...
  #1 (permalink)  
Antiguo 07/08/2014, 04:15
Avatar de legomolina  
Fecha de Ingreso: junio-2011
Ubicación: Valencia
Mensajes: 165
Antigüedad: 12 años, 11 meses
Puntos: 3
dataset con childNodes

Buenas, sólo me preguntaba porqué así el código funciona:
Código Javascript:
Ver original
  1. var form=$("formulario_"+formulario);
  2. var elementos=form.elements;
  3.  
  4. for(var i=0; i<elementos.length; i++) {
  5.         campo=elementos[i].dataset.campo; //atributo data-campo de los campos donde se guarda su nombre
  6.  
  7.         if(elementos[i].type=="text" || elementos[i].type=="textarea") { //si el elemento en cuestion es un input text o textarea
  8.             elementos[i].value=array[index][campo]; //asigna su valor al correspondiente del array
  9.         }
  10. }

y así me dice que "campo" es undefined (refiriendose a dataset.campo)

Código Javascript:
Ver original
  1. var elementos=form.childNodes;

El array es esto:
Código Javascript:
Ver original
  1. clientes[0]={codigo:'0',nombre:'nombre0',domicilio1:'domicilio10',domicilio2:'domicilio20',cp:'0',poblacion:'poblacion0',provincia:'provincia0',dni:'0',telefono:'0',movil:'0',fax:'0',email:'email0',observaciones:'observaciones0'};
  2. clientes[1]={codigo:'1',nombre:'nombre1',domicilio1:'domicilio11',domicilio2:'domicilio21',cp:'1',poblacion:'poblacion1',provincia:'provincia1',dni:'1',telefono:'1',movil:'1',fax:'1',email:'email1',observaciones:'observaciones1'};

y un ej del form sería este:
Código HTML:
Ver original
  1. <form id="formulario_clientes">
  2.                     <label for="formulario_clientes_codigo">Código: </label><input data-formulario="clientes" data-campo="codigo" data-disabled="true" type="text" name="codigo" id="formulario_clientes_codigo" size="5" disabled><br>
  3.                     <label for="formulario_clientes_nombre">Nombre: </label><input data-formulario="clientes" data-campo="nombre" data-disabled="false" type="text" name="nombre" id="formulario_clientes_nombre" size="40" maxlength="30"><br>
  4.                     <label for="formulario_clientes_domicilio1">Domicilio 1: </label><input data-formulario="clientes" data-campo="domicilio1" data-disabled="false" type="text" name="formulario_clientes_domicilio1" id="formulario_clientes_domicilio1" size="40" maxlength="30"><br>
  5.                     <label for="formulario_clientes_domicilio2">Domicilio 2: </label><input data-formulario="clientes" data-campo="domicilio2" data-disabled="false" type="text" name="formulario_clientes_domicilio2" id="formulario_clientes_domicilio2" size="40" maxlength="30"><br>
  6.                     <label for="formulario_clientes_cp">Código Postal: </label><input data-formulario="clientes" data-campo="cp" data-disabled="false" type="text" name="formulario_clientes_cp" id="formulario_clientes_cp" size="6" maxlength="5"><br>
  7.                     <label for="formulario_clientes_poblacion">Población: </label><input data-formulario="clientes" data-campo="poblacion" data-disabled="false" type="text" name="formulario_clientes_poblacion" id="formulario_clientes_poblacion" size="40" maxlength="30"><br>
  8.                     <label for="formulario_clientes_provincia">Provincia: </label><input data-formulario="clientes" data-campo="provincia" data-disabled="false" type="text" name="formulario_clientes_provincia" id="formulario_clientes_provincia" size="40" maxlength="30"><br>
  9.                     <label for="formulario_clientes_dni">DNI: </label><input data-formulario="clientes" data-campo="dni" data-disabled="false" type="text" name="formulario_clientes_dni" id="formulario_clientes_dni" size="40" maxlength="30"><br>
  10.                     <label for="formulario_clientes_telefono">Teléfono: </label><input data-formulario="clientes" data-campo="telefono" data-disabled="false" type="text" name="formulario_clientes_telefono" id="formulario_clientes_telefono" size="10" maxlength="10">
  11.                     <label for="formulario_clientes_movil" style="width: 69px;">Móvil: </label><input data-formulario="clientes" data-campo="movil" data-disabled="false" type="text" name="formulario_clientes_movil" id="formulario_clientes_movil" size="10" maxlength="10"><br>
  12.                     <label for="formulario_clientes_fax">Fax: </label><input data-formulario="clientes" data-campo="fax" data-disabled="false" type="text" name="formulario_clientes_fax" id="formulario_clientes_fax" size="10" maxlength="10"><br>
  13.                     <label for="formulario_clientes_email">Email: </label><input data-formulario="clientes" data-campo="email" data-disabled="false" type="text" name="formulario_clientes_email" id="formulario_clientes_email" size="40" maxlength="30"><br>
  14.                     <label for="formulario_clientes_observaciones" style="vertical-align: top;">Observaciones: </label><textarea data-formulario="clientes" data-campo="observaciones" data-disabled="false" name="formulario_clientes_observaciones" id="formulario_clientes_observaciones" cols="31" rows="3"></textarea>
  15.                 </form>

Debe de ser cosa del childnodes pero ni idea de porque no funciona. He probado tambien con getAttribute("data-campo"); pero tampoco funciona
Gracias de antemano
  #2 (permalink)  
Antiguo 07/08/2014, 07:37
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: dataset con childNodes

el problema es que dataset no es una propiedad de childNodes. por otro lado dataset no es compatible con ie10-, por lo tanto, para encontrar compatibilidad has de usar el método getAttribute()
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 07/08/2014, 08:41
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Respuesta: dataset con childNodes

Hola:

No entiendo la tendencia a complicar las cosas sencillas... childNodes es la colección de todos los nodos hijos, así que cuentan también nodos que son comentarios o contenido literal (sin etiquetas), o cualquier nodo que no sea parte del formulario (un simple br o hr... etc.)

Para formularios, lo más sencillo siempre ha sido a partir de la raíz del formulario (el tag form), seguido de su atributo name (si fuese el caso con su respectivo índice).

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 07/08/2014, 15:31
Avatar de legomolina  
Fecha de Ingreso: junio-2011
Ubicación: Valencia
Mensajes: 165
Antigüedad: 12 años, 11 meses
Puntos: 3
Respuesta: dataset con childNodes

Buenas otra vez.
Caricatos, lo que me propones es algo así?
Código Javascript:
Ver original
  1. formulario=document.getElementById("formulario");
  2. for(i=0; i<formulario.getElementsByName("nombre").lenght; i++){
  3. nombre=formulario.getElementsByName("nombre")[i];
  4. }
Saludos
  #5 (permalink)  
Antiguo 07/08/2014, 18:42
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Respuesta: dataset con childNodes

Hola:

Aunque algo así podría funcionar, si el elemento tiene el name "nombre", lo puedes referenciar con formulario.nombre.value (o si es un array usar índices tal como lo pones). también se pueden entrecorchetar los literales, o entre corchetes usar variables.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 08/08/2014, 05:14
Avatar de legomolina  
Fecha de Ingreso: junio-2011
Ubicación: Valencia
Mensajes: 165
Antigüedad: 12 años, 11 meses
Puntos: 3
Respuesta: dataset con childNodes

Buenas, el problema es que no todos tienen el atributo name porque este lo uso para diferenciar los campos que se graban en la bbdd de los que no. En cambio TODOS se tienen que rellenar. No se si me he explicado bien.
Supón el formulario que pasé al principio. Rellenar se rellenan todos los campos pero quizás no todos se tengan que guardar en la bbdd debido a que se obtienen de otra forma, etc... La cosa es que en mi script, los que se guardan lo hacen bajo la condición de que el atributo name esté puesto. Creo que eso es todo. Por eso utilizo el form.elements y no lo que tu proponías. Y yo buscaba usar el childnodes porque no siempre los inputs estan dentro de un form.
Si a alguien se le ocurre una solución estoy abierto a probarla...
Gracias, saludos
  #7 (permalink)  
Antiguo 08/08/2014, 07:45
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 1 mes
Puntos: 1284
Respuesta: dataset con childNodes

Hola:

Siempre considero que las páginas sean accesibles... resumiendo, que sin javascript todo funcione bien, así que la existencia de atributos siempre las dejo en el servidor... y desde el servidor es imposible conocer si los controles llevan ese atributo (los disabled pueden tenerlos y en el servidor no le llegan)... este último comentario vale para discriminar controles con atributo name (simplemente se deshabilitan y no llegan).

Estoy seguro que puedes simplificar esas condiciones... supongo que no se tratará de tantos controles como para no poder hacerlo...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 08/08/2014, 08:09
Avatar de legomolina  
Fecha de Ingreso: junio-2011
Ubicación: Valencia
Mensajes: 165
Antigüedad: 12 años, 11 meses
Puntos: 3
Respuesta: dataset con childNodes

Buenas, creo que intentaré lo que dices tu xD. Será más sencillo.
Gracias a todos

Etiquetas: dataset, html5
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 03:22.