Foros del Web » Programando para Internet » Javascript »

Reubicar input

Estas en el tema de Reubicar input en el foro de Javascript en Foros del Web. ¡Hola! Estoy programando en javascript y php y tengo 1 problemilla. Yo creo los hermanos dinámicamente (el código está abajo) y los creaba dentro de ...
  #1 (permalink)  
Antiguo 18/07/2007, 02:35
 
Fecha de Ingreso: febrero-2007
Mensajes: 138
Antigüedad: 17 años, 2 meses
Puntos: 0
Reubicar input

¡Hola!

Estoy programando en javascript y php y tengo 1 problemilla. Yo creo los hermanos dinámicamente (el código está abajo) y los creaba dentro de un fieldset, pero para validar los datos introducidos por el usuario tue que quitar el fieldset, si no no me dejaba validarlo (el código de la validación no lo he incluido para no enrevesar más el código). Entonces ahora, al yo pulsar el botón para crear un nuevo hermano, como no tiene fieldset me sale al final de la página, pero yo quiero que me salga donde está el código de crear el hermano, ¿cómo se puede hacer eso?

Muchas gracias




Código:
<? 
  session_start();
?>

<html>
<head>

<script type="text/javascript">

num=0;
function crearHermano(obj) {
  num++;
 			//Creamos los datos del hermano 
  
  fi = document.getElementById('f1'); 
  contenedor = document.createElement('div'); 
  contenedor.id = 'div'+num; 
  fi.appendChild(contenedor); 

  txt = document.createElement('<br>');				// Meto un salto de línea
  contenedor.appendChild(txt);
  
  txt = document.createElement('<br>');				// Meto un salto de línea
  contenedor.appendChild(txt);
  
  txt = document.createTextNode('DNI: ');			//Creamos el DNI	
  ele = document.createElement('input'); 
  ele.type = 'text'; 
  ele.name = 'cDNIH'+num; 
  contenedor.appendChild(txt);
  contenedor.appendChild(ele); 
  txt = document.createElement('<br>');				// Meto un salto de línea
  contenedor.appendChild(txt);
  txt = document.createElement('<br>');				// Meto un salto de línea
  contenedor.appendChild(txt);
	
													//Creamos el nombre
  txt = document.createTextNode('Nombre: ');
  ele = document.createElement('input'); 
  ele.type = 'text'; 
  ele.name = 'cNombreH'+num; 
  ele.size = '40';
  contenedor.appendChild(txt);
  contenedor.appendChild(ele); 
  txt = document.createElement('<br>');				// Meto un salto de línea
  contenedor.appendChild(txt);
  txt = document.createElement('<br>');				// Meto un salto de línea
  contenedor.appendChild(txt);

  txt = document.createElement('<br>');				// Meto un salto de línea
  contenedor.appendChild(txt);
  txt = document.createElement('<br>');				// Meto un salto de línea
  contenedor.appendChild(txt);  
 
  
  txt = document.createElement('<br>');				// Meto un salto de línea
  contenedor.appendChild(txt);
  ele = document.createElement('input'); 
  ele.type = 'button'; 
  ele.value = 'Borrar'; 
  ele.name = 'div'+num; 
  ele.onclick = function () {borrar(this.name)} 
  contenedor.appendChild(ele); 
  
  
}
function borrar(obj) {
  fi = document.getElementById('f1'); 
  fi.removeChild(document.getElementById(obj)); 
}


</script>

<title>Crear datos familiares</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>


<?

include("conexion.php");


echo '<form name="f" id="f1" method = "POST" action ="guardarDatosFamiliares.php" OnSubmit="return validar(this)">

//Esto iba antes dentro de un fieldset
<h2>Nuevo hermano</h2>
<input type="button" value="Añadir Hermano" onclick="crearHermano(this)">
</div>
<br><br>
';	
//Hasta aqui llegaba el fieldset

echo'<input name="nHermanosCreados" type="hidden" value="">';		

echo  '<div style="margin-left: 3%; width=200px;"> 
    Padre: <input name="cNombreP" type="text" size="40">
	&nbsp&nbsp Edad: <input name="cEdadP" size="3" type="text">
    &nbsp&nbsp Estado civil: 	
	
  <select name="cECivilP">
      <option value="Soltero">Soltero</option>
      <option value="Casado">Casado</option>
      <option value="Separado">Separado</option>
      <option value="Viudo">Viudo</option>
  </select>
	
	<br><br>
    Estudios: <input name="cEstudiosPadre" type="text">
	&nbsp&nbsp Profesión: <input name="cProfesionP" size="40" type="text">
	&nbsp&nbsp Situación laboral: 
	
	<select name="cSituacionLaboralP">
      <option value="Activo">Activo</option>
	  <option value="Desempleado">Desempleado</option>  
      <option value="Sus labores">Sus labores</option>
      <option value="Invalidez">Invalidez</option>
    </select>
	
	<br><br>';

echo '
<input name="botonGuardar" type="submit" value="Guardar">

</form>';
?>

</body>
</html>
  #2 (permalink)  
Antiguo 18/07/2007, 02:50
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Reubicar input

Hola:

La verdad es que con el código me pierdo un poco, pero en vez de tomar como referencia el fieldset que ahora no tienes (no entiendo tampoco porqué lo has tenido que quitar), puedes tomar otra referencia como el elemento padre, y el hermano siguiente:

papa = obj.parentNode;
hermano = obj.nextSibling;

if (hermano == undefined)
papa.appendChild(nuevoGermano)
else
papa.insertBefore(nuevoHermano, hermano)

Espero que te sirva.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 18/07/2007, 04:00
 
Fecha de Ingreso: febrero-2007
Mensajes: 138
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Reubicar input

No, mi problema no es que se me añadan mal al contenedor, si no que por pantalla el botón de añadir hermano está arriba de los inputs de los datos de padre, y al yo pulsar el botón de añadir hermano entonces en vez de salirme a continuación del botón (como me salía cuando tenía el fieldset) ahora me sale al final de la página, y entonces lo que yo quiero es saber si hay alguna manera de hacer que no salga al final, sino a continuación del botón añadir hermano. El código se puede ejecutar para poder verlo gráficamente.

Y los fieldset los tuve que quitar para poder validar los datos de los hermanos que iba añadiendo.

Muchas gracias.
  #4 (permalink)  
Antiguo 18/07/2007, 04:14
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Reubicar input

Cita:
Iniciado por marcospuig Ver Mensaje
No, mi problema no es que se me añadan mal al contenedor, si no que por pantalla el botón de añadir hermano está arriba de los inputs de los datos de padre, y al yo pulsar el botón de añadir hermano entonces en vez de salirme a continuación del botón (como me salía cuando tenía el fieldset) ahora me sale al final de la página, y entonces lo que yo quiero es saber si hay alguna manera de hacer que no salga al final, sino a continuación del botón añadir hermano. El código se puede ejecutar para poder verlo gráficamente.

Y los fieldset los tuve que quitar para poder validar los datos de los hermanos que iba añadiendo.

Muchas gracias.
¿Has leído bien mi respuesta...?

Las pocas líneas que puse, insertan el nodo inmediatamente después del botón que se pulsó (si no he cometido ningún error... of course)

Se toma de referencia el elemento padre del botón (obj.parentNode) y el hermano si lo hubiera (de no haberlo sería undefined)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 18/07/2007, 04:48
 
Fecha de Ingreso: febrero-2007
Mensajes: 138
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Reubicar input

Perdona, es que no estoy muy avanzado en javascript... Entonces eso es código javascript que iría ¿donde? ¿en medio del código php, justo después del botón 'añadir hermano'? es que yo pensaba que se podría controlar desde php pero creo que lo que me has puesto es javascript, y no sé donde ubicarlo. ¿puedes ponerme un ejemplo que se asemeje a un código donde un elemento (el hermano) se cree en javascript y otro (el padre) se cree en php?

Muchas gracias
  #6 (permalink)  
Antiguo 18/07/2007, 05:36
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Reubicar input

Hola:

El código que estás mostrando es javascript, y donde estás añadiendo el objeto:

fi = obj.parentNode;

Y luego...

fi.appendChild(contenedor);

... pero así se añade detrás del último elemento del "padre del botón", y si tienes al final un botón submit (por ejemplo), se añadirá el elemento detrás de ese botón, y tampoco creo que sea deseable, así que usando el método insertBefore del siguiente elemento (obj.nextSibling) cada nueva inserción se haría inmediatamente detrás del botón (dejando las inserciones anteriores por detrás de cada inserción nueva)...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 18/07/2007, 09:01
 
Fecha de Ingreso: febrero-2007
Mensajes: 138
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Reubicar input

Si, funciona, muchisssimas gracias

Pero hay 1 pequeño problema, y es que ahora el borrar no me funciona. El script con tu explicación me ha quedado así:


<script type="text/javascript">

num=0;
function crearTitulacion(obj) {

papa = obj.parentNode;
hermano = obj.nextSibling;

num++;
fi = document.getElementById('f1');
contenedor = document.createElement('div');
contenedor.id = 'div'+num;
if (hermano == undefined)
papa.appendChild(ele)
else
papa.insertBefore(contenedor, hermano)


// fi.appendChild(contenedor);

ele = document.createElement('input');
ele.type = 'text';
ele.name = 'titulacion'+num;
ele.size = '40';
//contenedor.appendChild(ele);
if (hermano == undefined)
papa.appendChild(ele)
else
papa.insertBefore(ele, hermano)


ele = document.createElement('input');
ele.type = 'button';
ele.value = 'Borrar';
ele.name = 'div'+num;
ele.onclick = function () {borrar(this.name)}
// contenedor.appendChild(ele);
if (hermano == undefined)
papa.appendChild(ele)
else
papa.insertBefore(ele, hermano)

}
function borrar(obj) {
fi = document.getElementById('f1');
fi.removeChild(document.getElementById(obj));
}

</script>



Pero ahora cuando pulso en el botón borrar no me hace nada
  #8 (permalink)  
Antiguo 18/07/2007, 10:10
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Reubicar input

Hola:

Viendo tu código, cuando quieres borrar lo haces desde un botón inmediatamente después del campo de texto... y por cierto, el div que estás poniendo lo estás dejando vacío, así que puedes cambiarlo simplemente por un br

En resumen, tu botón de borrado ahora debería implicar al propio botón y a los 2 tags anteriores (previousSibling), entonces en vez de this.name sería mejor que el parámetro sea this y el contenido...

function borrar(elemento) {
elemento.parentNode.removeChild(elemento.previousS ibling);// borramos el campo
elemento.parentNode.removeChild(elemento.previousS ibling);// borramos el div
elemento.parentNode.removeChild(elemento); //borramos el propio botón
}

Al borrar el primer previousSibling (Nodo anterior) al usar nuevamente previousSibling se refiere al nodo anterior... si te diese problemas podrías usar en primer lugarel anterior del anterior (previousSibling.previousSibling) aunque no creo que falle...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
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 06:04.