Foros del Web » Programando para Internet » Jquery »

Jquery: Problema creando campo dinámico

Estas en el tema de Jquery: Problema creando campo dinámico en el foro de Jquery en Foros del Web. Hola a todos! Estoy realizando una página web para un proyecto que debo realizar. En una de las partes tengo un formulario (html + php) ...
  #1 (permalink)  
Antiguo 26/03/2011, 16:35
 
Fecha de Ingreso: enero-2011
Mensajes: 6
Antigüedad: 13 años, 10 meses
Puntos: 0
Jquery: Problema creando campo dinámico

Hola a todos!

Estoy realizando una página web para un proyecto que debo realizar. En una de las partes tengo un formulario (html + php) en el cual se quiere dar de alta un artículo de revista. Uno de los campos de dicho formulario es el autor del artículo. Para este menester he puesto un dropdown que contiene los nombres de los autores que tengo registrados en una tabla de la base de datos. Acompañando a este dropdown tengo un enlace "Más autores" que al pusarlo quiero que aparezca otro dropdrown, con los mismos datos de autores que aparecían en el original, y así sucesivamente para poder seleccionar todos los autores que necesite el usuario.

Para ello he utilizado un código en Jquery que he encontrado, pero no me acaba de funcionar.

Os lo adjunto:

Código:
jQuery.fn.generaNuevosCampos = function(etiqueta, nombreCampo, indice){
   $(this).each(function(){
      elem = $(this);
      elem.data("etiqueta",etiqueta);
      elem.data("nombreCampo",nombreCampo);
      elem.data("indice",indice);
      
      elem.click(function(e){
         e.preventDefault();
         elem = $(this);
         etiqueta = elem.data("etiqueta");
         nombreCampo = elem.data("nombreCampo");
         indice = elem.data("indice");
         texto_insertar = '<p>' + etiqueta + ':<br><div><select class="element select medium" name="'  + nombreCampo + indice + '"><? $consulta1=mysql_query("SELECT * FROM Investigadors");   echo "<option value='0' selected='selected'>Selecciona un investigador de la llista...</option>";
			while($registro1=mysql_fetch_array($consulta1))
	{
		echo '<option value="'.$registro1[Id].'">'.$registro1['Nom'].$registro1['Cognom'].'</option>';
	}
		echo "</select>";
?></select></p>';
         indice ++;
         elem.data("indice",indice);
         nuevo_campo = $(texto_insertar);
         elem.before(nuevo_campo);
      });
   });
   return this;
} 
$(document).ready(function(){
		$("#mascampos").generaNuevosCampos("Selecciona un investigador de la llista...", "compra", 2);
	});
Y este es la parte del formulario en cuestión afectada:

Código HTML:
 <li id="li_12" >
		<label class="description" for="element_12">Autors de l'article</label>
		<div>
		  <select class="element select medium" id="autors" name="autors">
		    <?
			$consulta1=mysql_query("SELECT * FROM Investigadors");
			?>
			<?
        echo "<option value='0' selected='selected'>Selecciona un investigador de la llista...</option>";
			while($registro1=mysql_fetch_array($consulta1))
	{
		//echo "Hola";
		echo '<option value="'.$registro1[Id].'">'.$registro1['Nom'].$registro1['Cognom'].'</option>';
		//echo "<option value='1'>Hola</option>";
		//{echo '<OPTION VALUE="'.$row[Nom].'">'.$row[Nom].'</OPTION>';}; 
	}
	echo "</select>";
	
?>
        	      </select>
                  <p>
                  <a href="#" id="mascampos">Más campos</a>
                  </p>
		</div> 
		</li> 
¡Desde ya muchísimas gracias por adelantado!
  #2 (permalink)  
Antiguo 27/03/2011, 22:30
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 8 meses
Puntos: 192
Respuesta: Jquery: Problema creando campo dinámico

¿Podrías expander "no me acaba de funcionar"? ¿Qué hace que no debería hacer? No funciona en absoluto? Cuanto más específico seas, mejor va a ser la ayuda :)
__________________
nahueljose.com.ar
  #3 (permalink)  
Antiguo 27/03/2011, 22:42
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 8 meses
Puntos: 192
Respuesta: Jquery: Problema creando campo dinámico

Mirá, eliminando las líneas que generan el HTML dinámico esto funciona:

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
	<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js'></script>
    <script type="text/javascript">
	jQuery.fn.generaNuevosCampos = function(etiqueta, nombreCampo, indice){
    $(this).each(function(){
      elem = $(this);
      elem.data("etiqueta",etiqueta);
      elem.data("nombreCampo",nombreCampo);
      elem.data("indice",indice);
      
      elem.click(function(e){
         e.preventDefault();
         elem = $(this);
         etiqueta = elem.data("etiqueta");
         nombreCampo = elem.data("nombreCampo");
         indice = elem.data("indice");
         texto_insertar = "<p><select class='element select medium'><option value='' selected='selected'>Selecciona un investigador de la llista...</option><option>Inverstigador 1</option><option>Investigador 2</option></select></p>'";
         indice ++;
         elem.data("indice",indice);
         nuevo_campo = $(texto_insertar);
         elem.before(nuevo_campo);
      });
    });
    return this;
    } 
    $(document).ready(function(){
                $("#mascampos").generaNuevosCampos("Selecciona un investigador de la llista...", "compra", 2);
        });
    </script>
    <title></title>
  </head>
  <body>
    <label class="description" for="element_12">Autors de l'article</label>
    <div>
     <p><select class="element select medium"><option value='0' selected="selected">Selecciona un investigador de la llista...</option><option>Inverstigador 1</option><option>Investigador 2</option></select></p>
      <p>
        <a href="#" id="mascampos" name="mascampos">Más campos</a>
      </p>
    </div>
  </body>
</html> 
Lo que me parece que no es necesario es generar dos veces el mismo HTML. Es decir, generás el <select> que aparece por defecto con PHP y pues con jQuery lo clonás. Es fácil. Si no lo lográs solucionar yo estaría dispuesto a tomarme unos minutos y hacerte un script que haga dicha tarea.

Un saludo.
__________________
nahueljose.com.ar
  #4 (permalink)  
Antiguo 28/03/2011, 14:41
 
Fecha de Ingreso: enero-2011
Mensajes: 6
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Jquery: Problema creando campo dinámico

Muchs gracias por responder Naahuel. Tirando de tu idea he cambiado un poco el asunto. He clonado el elemento en cuestión, y consigo que me salga otro select de la misma manera. Lo que no consigo de ninguna manera es acceder al select en cuestión para cambiarle la id para que sea diferente a la del objeto clonado.

Código HTML:
<li id="li_12" >
		<label class="description" for="element_12">Autors de l'article</label>
       
		<div id="prueba">
		  <select class="element select medium" id="autor" name="autor">
            <?
			$consulta1=mysql_query("SELECT * FROM Investigadors");
			?>
			<?
        echo "<option value='0' selected='selected'>Selecciona un investigador de la llista...</option>";
			while($registro1=mysql_fetch_array($consulta1))
	{
		//echo "Hola";
		echo '<option value="'.$registro1['Id'].'">'.$registro1['Nom'].$registro1['Cognom'].'</option>';
		//echo "<option value='1'>Hola</option>";
		//{echo '<OPTION VALUE="'.$row[Nom].'">'.$row[Nom].'</OPTION>';}; 
	}
	echo "</select>";
	
?>
        	      </select>
                  <p>
    <a href="" onclick="duplicar();return false;">duplicar</a> </p>
		</div> 
		</li> 
Código:
x=0;
	function duplicar(){
   var obj = document.getElementByClass("autor").cloneNode(true);
       //obj.getElementsByTagName("select")[0].id="prueba";//obj[0].id = obj[0].name = "prueba"+x;
	      //miParrafo = $("capadiv").getElement("p");//autor.setAttribute("id","loQueQuieras") 
   document.getElementById("prueba").appendChild(obj);
   x++;
}
¡Muchas gracias de nuevo por adelantado!

Os agradezco mil la ayuda.
  #5 (permalink)  
Antiguo 28/03/2011, 21:37
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 8 meses
Puntos: 192
Respuesta: Jquery: Problema creando campo dinámico

Tenés mal el método. Cambiá la linea de esta forma:

Código Javascript:
Ver original
  1. var obj = document.getElementsByClassName("autor")[0].cloneNode(true);

Te faltó el [0] además de que pusiste Element en lugar de Elements. Me parece que ese método no existe para IE (puede ser que esté hablando macanas, podés probar). Lo mejor es, ya que estabas usando jQuery, seguir usándolo. Algo así:
Código Javascript:
Ver original
  1. function duplicar(){
  2.         var obj = $('.autor').first().clone();
  3.         $('#prueba').append(obj);
  4.     }
Eso funcionará seguro en IE, además que el código es mucho más simple. Hacer que todos tengan diferentes IDs podrías hacer algo así:
Código Javascript:
Ver original
  1. x = 0
  2. function duplicar(){
  3.     x++;
  4.     var obj = $('.autor').first().clone().attr('id','prueba' + x);;
  5.     var nuevo = $('#prueba').append(obj);
  6. }

Espero te sirva. Un saludo!
__________________
nahueljose.com.ar
  #6 (permalink)  
Antiguo 29/03/2011, 06:52
 
Fecha de Ingreso: enero-2011
Mensajes: 6
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Jquery: Problema creando campo dinámico

Muchas gracias de nuevo por responder. Tampoco hay manera, he echo lo que tu me dices, pero hay algo que se me debe escapar:

Código:
<script src="jquery-1.5.1.js" type="text/javascript"></script>
	<script>
	$(document).ready(function(){
		$("#mascampos").duplicar();
	});

x=0;
  
    jQuery.fn.duplicar=function (){
        x++;
        var obj = $('.autor').first().clone().attr('id','prueba' + x);;
        var nuevo = $('#prueba').append(obj);
    }
</script>
Código:
 <li id="li_12" >
		<label class="description" for="element_12">Autors de l'article</label>
       
		<div id="prueba">
		  <select class="element select medium" id="autor" name="autor">
            <?
			$consulta1=mysql_query("SELECT * FROM Investigadors");
			?>
			<?
        echo "<option value='0' selected='selected'>Selecciona un investigador de la llista...</option>";
			while($registro1=mysql_fetch_array($consulta1))
	{
		//echo "Hola";
		echo '<option value="'.$registro1['Id'].'">'.$registro1['Nom'].$registro1['Cognom'].'</option>';
		//echo "<option value='1'>Hola</option>";
		//{echo '<OPTION VALUE="'.$row[Nom].'">'.$row[Nom].'</OPTION>';}; 
	}
	echo "</select>";
	
?>
        	      </select>
                <p>
                      <a href="#" id="mascampos">Más campos</a>              </p>
                </div>
</li>
  #7 (permalink)  
Antiguo 29/03/2011, 09:23
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 8 meses
Puntos: 192
Respuesta: Jquery: Problema creando campo dinámico

El problema está en que esta línea:
Código Javascript:
Ver original
  1. var obj = $('.autor').first().clone().attr('id','prueba' + x);;
(omitiendo que se me zafó un doble punto y coma :P ) hace referencia a un elemento con clase autor. El cual no existe. Probá modificándola de esta forma:

Código Javascript:
Ver original
  1. var obj = $('#autor').first().clone().attr('id','autor' + x);

Entonces te clonará el primer select que tiene ID autor y los sucesivos clones tendrán ID's con un número al final. Debería funcionar.
__________________
nahueljose.com.ar
  #8 (permalink)  
Antiguo 30/03/2011, 06:58
 
Fecha de Ingreso: enero-2011
Mensajes: 6
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Jquery: Problema creando campo dinámico

He puesto lo que me dijiste pero tampoco funciona:

Código:
<script type="text/javascript" src="view.js"></script>
	<script src="jquery-1.5.1.js" type="text/javascript"></script>
	<script>
	$(document).ready(function(){
		$("#mascampos").duplicar();
	});
  
  x=0;
    jQuery.fn.duplicar=function (){
       
    var obj = $("#autor").first().clone().attr("id","autor" + x);        
	var nuevo = $("#prueba").append(obj);
	 x++;
    }
</script>
Código PHP:
 <li id="li_12" >
        <label class="description" for="element_12">Autors de l'article</label>
       
        <div id="prueba">
          <select class="element select medium" id="autor" name="autor">
            <?
            $consulta1
=mysql_query("SELECT * FROM Investigadors");
            
?>
            <?
        
echo "<option value='0' selected='selected'>Selecciona un investigador de la llista...</option>";
            while(
$registro1=mysql_fetch_array($consulta1))
    {
        
//echo "Hola";
        
echo '<option value="'.$registro1['Id'].'">'.$registro1['Nom'].$registro1['Cognom'].'</option>';
        
//echo "<option value='1'>Hola</option>";
        //{echo '<OPTION VALUE="'.$row[Nom].'">'.$row[Nom].'</OPTION>';}; 
    
}
    echo 
"</select>";
    
?>
                  </select>
                <p>
                      <a href="#" id="mascampos">Más campos</a>              </p>
                </div> 
         </li>
La verdad es que nose que probar, pienso que debería funcionar como me has comentado, pero nada. Al pusar en el enlace Más campos no me aperece el campo clonado. Muchas gracias de nuevo.
  #9 (permalink)  
Antiguo 30/03/2011, 07:06
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 8 meses
Puntos: 192
Respuesta: Jquery: Problema creando campo dinámico

El código si funciona, aunque mal por la forma en que lo has puesto. A vos no te debe funcionar porque has cerrado </select> dos veces. Por la forma en que llamás a la función duplicar, esta se llama sólo una vez al cargar el documento. Lo correcto sería así:
Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $("#mascampos").click(function(){
  3.         $('#autor').duplicar();
  4.     });
  5. });
  6.  
  7. var x=0;
  8. $.fn.duplicar = function(){
  9.     var obj = $(this).first().clone().attr("id","autor" + x);        
  10.     var nuevo = $("#prueba").append(obj);
  11.     x++;
  12. }
__________________
nahueljose.com.ar
  #10 (permalink)  
Antiguo 30/03/2011, 08:48
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 11 meses
Puntos: 65
Respuesta: Jquery: Problema creando campo dinámico

para qué querés generar id dinámicos? no hacen falta
  #11 (permalink)  
Antiguo 31/03/2011, 11:11
 
Fecha de Ingreso: enero-2011
Mensajes: 6
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Jquery: Problema creando campo dinámico

Cita:
Iniciado por Naahuel Ver Mensaje
El código si funciona, aunque mal por la forma en que lo has puesto. A vos no te debe funcionar porque has cerrado </select> dos veces. Por la forma en que llamás a la función duplicar, esta se llama sólo una vez al cargar el documento. Lo correcto sería así:
Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $("#mascampos").click(function(){
  3.         $('#autor').duplicar();
  4.     });
  5. });
  6.  
  7. var x=0;
  8. $.fn.duplicar = function(){
  9.     var obj = $(this).first().clone().attr("id","autor" + x);        
  10.     var nuevo = $("#prueba").append(obj);
  11.     x++;
  12. }
Creo que ya me funciona del todo. Muchísimas gracias Naahuel!!!

Cita:
Iniciado por Dany_s Ver Mensaje
para qué querés generar id dinámicos? no hacen falta
Para poderlos enviar desde el formulario y guardarlos en mi bd, aunque por loq ue dices quizás haya otra solución. No estoy muy ducho en el lenguaje de programación web.

Última edición por Widrings; 31/03/2011 a las 11:18
  #12 (permalink)  
Antiguo 31/03/2011, 11:20
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 8 meses
Puntos: 192
Respuesta: Jquery: Problema creando campo dinámico

Cita:
Iniciado por Widrings Ver Mensaje
Código:
 <li class="" id="li_12">

		<label class="description" for="element_12">Autors de l'article</label>
       
		<div id="prueba">
		  <select class="element select medium" id="autor" name="autor">
            			<option value="0" selected="selected">Selecciona un investigador de la llista...</option><option value="19">Hola</option></select>        	     
                      <a href="#" id="mascampos">Más campos</a>              
                <select class="element select medium" id="autor0" name="autor">
            			<option value="0" selected="selected">Selecciona un investigador de la llista...</option><option value="19">Hola</option></select><select class="element select medium" id="autor1" name="autor">

            			<option value="0" selected="selected">Selecciona un investigador de la llista...</option><option value="19">Hola</option></select><select class="element select medium" id="autor2" name="autor">
            			<option value="0" selected="selected">Selecciona un investigador de la llista...</option><option value="19">Hola</option></select><select class="element select medium" id="autor3" name="autor">
            			<option value="0" selected="selected">Selecciona un investigador de la llista...</option><option value="19">Hola</option></select></div> 
                <div id="prueba2"> </div>
		 </li>
No entiendo el problema. Yo lo veo bien. Tu mismo código pero ordenado:
Código HTML:
<li class="" id="li_12">
<label class="description" for="element_12">Autors de l'article</label>
<div id="prueba">
	<select class="element select medium" id="autor" name="autor">
		<option value="0" selected="selected">Selecciona un investigador de la llista...</option>
		<option value="19">Hola</option>
	</select>
	<a href="#" id="mascampos">Más campos</a>
	<select class="element select medium" id="autor0" name="autor">
		<option value="0" selected="selected">Selecciona un investigador de la llista...</option>
		<option value="19">Hola</option>
	</select>
	<select class="element select medium" id="autor1" name="autor">
		<option value="0" selected="selected">Selecciona un investigador de la llista...</option>
		<option value="19">Hola</option>
	</select>
	<select class="element select medium" id="autor2" name="autor">
		<option value="0" selected="selected">Selecciona un investigador de la llista...</option>
		<option value="19">Hola</option>
	</select>
	<select class="element select medium" id="autor3" name="autor">
		<option value="0" selected="selected">Selecciona un investigador de la llista...</option>
		<option value="19">Hola</option>
	</select>
</div>
<div id="prueba2">
</div>
</li> 
Para mi está perfecto.
__________________
nahueljose.com.ar
  #13 (permalink)  
Antiguo 31/03/2011, 11:33
 
Fecha de Ingreso: enero-2011
Mensajes: 6
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Jquery: Problema creando campo dinámico

Cita:
Iniciado por Naahuel Ver Mensaje
No entiendo el problema. Yo lo veo bien. Tu mismo código pero ordenado:
Código HTML:
<li class="" id="li_12">
<label class="description" for="element_12">Autors de l'article</label>
<div id="prueba">
	<select class="element select medium" id="autor" name="autor">
		<option value="0" selected="selected">Selecciona un investigador de la llista...</option>
		<option value="19">Hola</option>
	</select>
	<a href="#" id="mascampos">Más campos</a>
	<select class="element select medium" id="autor0" name="autor">
		<option value="0" selected="selected">Selecciona un investigador de la llista...</option>
		<option value="19">Hola</option>
	</select>
	<select class="element select medium" id="autor1" name="autor">
		<option value="0" selected="selected">Selecciona un investigador de la llista...</option>
		<option value="19">Hola</option>
	</select>
	<select class="element select medium" id="autor2" name="autor">
		<option value="0" selected="selected">Selecciona un investigador de la llista...</option>
		<option value="19">Hola</option>
	</select>
	<select class="element select medium" id="autor3" name="autor">
		<option value="0" selected="selected">Selecciona un investigador de la llista...</option>
		<option value="19">Hola</option>
	</select>
</div>
<div id="prueba2">
</div>
</li> 
Para mi está perfecto.
Disculpa, lo vi al postear justo que estaba bien, no me había dado cuenta. Funciona perfecto. Muchísimas gracias por tu ayuda!
  #14 (permalink)  
Antiguo 01/04/2011, 05:55
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 11 meses
Puntos: 65
Respuesta: Jquery: Problema creando campo dinámico

con el método serialize te forma el query string

en tu campo que se va a duplicar lo haces como array name="opcion[]"

Código HTML:
Ver original
  1.     <head>
  2.         <title>Ejemplo</title>
  3.         <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
  4.         <script>
  5.  
  6.         $(function(){
  7.             fila = $("#prueba").html();
  8.             $("#mascampos").click(function(){
  9.                 $("#prueba").append( fila );
  10.             });
  11.  
  12.             $('#submit').click( function(){
  13.                 alert ($('select').serialize());
  14.             });
  15.         });
  16.  
  17.         </script>
  18.     </head>
  19.     <body>
  20.  
  21.     <div id="prueba">
  22.         <div class="fila">
  23.             <select name="opcion[]">
  24.                 <option>1</option>
  25.                 <option>2</option>
  26.             </select>
  27.         </div>
  28.     </div>
  29.     <a href="#" id="mascampos">Agregar</a>
  30.     <input id="submit" type="submit" value="Enviar">
  31.  
  32.     </body>
  33. </html>

Etiquetas: 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 05:40.