Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/03/2010, 07:24
Stendelis
 
Fecha de Ingreso: julio-2006
Ubicación: Montevideo
Mensajes: 34
Antigüedad: 18 años, 5 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.        });