Foros del Web » Programando para Internet » Jquery »

Problema, agregar o borrar opciones con jquery

Estas en el tema de Problema, agregar o borrar opciones con jquery en el foro de Jquery en Foros del Web. Hola, Necesito ayuda con este pequeño script.. La idea es simple: tengo 1 select con varias opciones tengo otro select vació tengo un div vacío ...
  #1 (permalink)  
Antiguo 25/03/2010, 08:10
 
Fecha de Ingreso: julio-2006
Ubicación: Montevideo
Mensajes: 34
Antigüedad: 17 años, 9 meses
Puntos: 0
Problema, agregar o borrar opciones con jquery

Hola,

Necesito ayuda con este pequeño script..
La idea es simple:
  1. tengo 1 select con varias opciones
  2. tengo otro select vació
  3. tengo un div vacío

Si selecciono del primer select y hago "add", la opcion seleccionada se agrega al select 2, se borra del select 1 y se crea un item en el listado con la opcion de borrar.

La opción de borrar en el listado quita del select 2 y del listado y agrega al select1.

La primera parte funciona bien, menos si selecciono varias opciones en el select1.
Y no logro que borre correctamente.

Ejecuten el siguiente código y vean los errores que dan. El código ya trae el jquery desde google.

Código HTML:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	<title>Prueba</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
	<script type="text/javascript">
		window.onload=function(){
			 $("#add").click(function(){
				var nombre = $("#select1 option:selected").text();	
				var valor = $("#select1 option:selected").val();	
			  $("#destino").append("<li id='"+valor+"'>"+nombre+" <a class='delete' href='#'>x</a></li>");
			  $("#select1 option:selected").remove().appendTo("#select2");
			 });

			$("a.delete").click(function(){
				var parent = $(this).parent();
				$("#select2").find("option[value='"+parent.attr("id")+"']").remove().appendTo("#select1");
				parent.remove();
			});
		}
	</script>
</head>
<body>
<form action="" method="post">
    <label>Select 1:</label><br />
    <select name="select1" id="select1" size="5" multiple>
        <option value="1">Opcion 1</option>
        <option value="2">Opcion 2</option>
        <option value="3">Opcion 3</option>
        <option value="4">Opcion 4</option>
        <option value="5">Opcion 5</option>
    </select><br /><a href="#" id="add">Add</a><br /><br /><br />
    
    <label>Select 2:</label><br />
    <select name="select2" id="select2" size="5" multiple>
    </select>
</form><br /><br /><br />

     <ul id="destino">
     </ul>	

</body>
</html> 

Última edición por Stendelis; 25/03/2010 a las 08:22
  #2 (permalink)  
Antiguo 25/03/2010, 09:15
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: Problema, agregar o borrar opciones con jquery

El problema es que cuando tienes seleccionado varios elementos del objeto select, $('select option:selected') te devuelve un array. Necesitas hacer un each para poder recorrer el array e insertarlos en el ul.

Al principio cuando se carga la pagina a.delete no existe en el DOM, por lo que necesitas buscar los elementos nuevos, esto lo logras con la funcion live de jquery, que le añade eventos a elementos aun cuando estos se agreguen al DOm despues de que la pagina haya sido cargada.

Código Javascript:
Ver original
  1. $(function(){
  2.        $("#add").click(function(){
  3.           $('#select1 option:selected').each(function(){
  4.                var nombre = $(this).text();  
  5.                var valor = $(this).val();
  6.                $("#destino").append("<li id='"+valor+"'>"+nombre+" <a class='delete' href='#'>x</a></li>");
  7.                $("#select1 option:selected").remove().appendTo("#select2");
  8.           });
  9.           return false;
  10.        });
  11.  
  12.       $("a.delete").live('click',function(){
  13.         var parent = $(this).parent();
  14.         $("#select2").find("option[value='"+parent.attr("id")+"']").remove().appendTo("#select1");
  15.         parent.remove();
  16.         return false;
  17.       });
  18. });
__________________
I see dead pixels
  #3 (permalink)  
Antiguo 25/03/2010, 09:59
 
Fecha de Ingreso: julio-2006
Ubicación: Montevideo
Mensajes: 34
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: Problema, agregar o borrar opciones con jquery

Gracias Serge, increíble funciona al pelo...
  #4 (permalink)  
Antiguo 26/03/2010, 07:24
 
Fecha de Ingreso: julio-2006
Ubicación: Montevideo
Mensajes: 34
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: Problema, agregar o borrar opciones con jquery

Cita:
Iniciado por SergeMedina Ver Mensaje
El problema es que cuando tienes seleccionado varios elementos del objeto select, $('select option:selected') te devuelve un array. Necesitas hacer un each para poder recorrer el array e insertarlos en el ul.

Al principio cuando se carga la pagina a.delete no existe en el DOM, por lo que necesitas buscar los elementos nuevos, esto lo logras con la funcion live de jquery, que le añade eventos a elementos aun cuando estos se agreguen al DOm despues de que la pagina haya sido cargada.

Código Javascript:
Ver original
  1. $(function(){
  2.        $("#add").click(function(){
  3.           $('#select1 option:selected').each(function(){
  4.                var nombre = $(this).text();  
  5.                var valor = $(this).val();
  6.                $("#destino").append("<li id='"+valor+"'>"+nombre+" <a class='delete' href='#'>x</a></li>");
  7.                $("#select1 option:selected").remove().appendTo("#select2");
  8.           });
  9.           return false;
  10.        });
  11.  
  12.       $("a.delete").live('click',function(){
  13.         var parent = $(this).parent();
  14.         $("#select2").find("option[value='"+parent.attr("id")+"']").remove().appendTo("#select1");
  15.         parent.remove();
  16.         return false;
  17.       });
  18. });
Como puedo modificar la funcion de #add, para que si la opcion ya esta agregada en el select2 no ejecute ninguno de los dos append.

Algo como lo que hice abajo, me funcionó, pero creo que no seria la forma correcta:


Código Javascript:
Ver original
  1. $("#add").click(function(){
  2.           $('#select1 option:selected').each(function(){
  3.                var nombre = $(this).text();  
  4.                var valor = $(this).val();
  5.                var agregar = true;
  6.                
  7.                $('#select2 option').each(function(){  
  8.                     var valor2 = $(this).val();  
  9.                    
  10.                     if (valor2 == valor){
  11.                         agregar = false;
  12.                         }
  13.                 });
  14.                
  15.                if (agregar){
  16.                    $("#destino").append("<li id='"+valor+"'>"+nombre+" <a class='delete' href='#'>x</a></li>");
  17.                    $("#select1 option:selected").remove().appendTo("#select2 ");
  18.                }           
  19.           });
  20.           return false;
  21.        });

Etiquetas: borrar, opciones
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:29.