Foros del Web » Programando para Internet » Jquery »

jQuery evitar duplicados en el drag y drop

Estas en el tema de jQuery evitar duplicados en el drag y drop en el foro de Jquery en Foros del Web. Hola. Tengo una lista con la clase ui-draggable y arrastro un elemento a otra lista con la clase ui-droppable. Mi duda es si hay alguna ...
  #1 (permalink)  
Antiguo 24/07/2011, 17:18
 
Fecha de Ingreso: marzo-2009
Mensajes: 18
Antigüedad: 15 años, 1 mes
Puntos: 0
jQuery evitar duplicados en el drag y drop

Hola.

Tengo una lista con la clase ui-draggable y arrastro un elemento a otra lista con la clase ui-droppable.

Mi duda es si hay alguna forma de evitar que un elemento se arrastre a la otra lista cuando ya existe dicho elemento en esa lista. Por ejemplo:

Código HTML:
Ver original
  1. <div id="div1">
  2. <ul>
  3. <li>uno</li>
  4. <li>dos</li>
  5. <li>tres</li>
  6. <li>uno</li>
  7. </ul>
  8. </div>
  9. <div id="div2">
  10. <ul>
  11. </ul>
  12. </div>

Arrastro el elemento "uno" a la otra lista. También arrastro el elemento "dos" a la otra lista. Pero si arrastro el otro elemento "uno" entonces no debe hacer el efecto droppable, pues ya existe el elemento "uno" en la otra lista.

¿Se podría hacer?

Muchísimas gracias por adelantado.

Saludos.
  #2 (permalink)  
Antiguo 25/07/2011, 07:01
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 4 meses
Puntos: 65
Respuesta: jQuery evitar duplicados en el drag y drop

¿algo así?
La lista #dos acepta solo li de #uno
en el drop creo un li y agrego un atributo data-index que tiene el valor de la posición de los li de #uno asi puedo comprobar antes de crearlo si ya existe, es lo que se me ocurrió.

Código HTML:
Ver original
  1.     <head>
  2.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  3.         <title>JSP Page</title>
  4.         <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
  5.         <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.min.js"></script>
  6.     </head>
  7.     <script>
  8.     $( function(){
  9.         $( "#uno li" ).draggable({helper:"clone"});
  10.  
  11.         $( "#dos" ).droppable({
  12.             accept: "#uno li",
  13.             drop: function( event, ui ){
  14.                 dataIndex = ui.draggable.index();
  15.                 if ( !$(this).find("li[data-index="+dataIndex+"]").length ){
  16.                     $( this ).find( ".placeholder" ).remove();
  17.                     $( "<li data-index='"+ dataIndex +"'></li>" ).html( ui.draggable.text() + " - <a href='#'>x</a>" ).appendTo( this );
  18.                 }
  19.             }
  20.         });
  21.  
  22.         $('a', '#dos').live('click', function(){
  23.             $(this).parent().remove();
  24.         });
  25.  
  26.     });
  27.     </script>
  28.     <style>
  29.         ul{min-height:50px; width:50px; background:#ccc}
  30.     </style>
  31.     <body>
  32.  
  33.     <ul id="uno">
  34.         <li>Uno</li>
  35.         <li>Dos</li>
  36.         <li>Tres</li>
  37.     </ul>
  38.  
  39.     <ul id="dos">
  40.  
  41.     </ul>
  42.  
  43.     </body>
  44. </html>

sino mejor pasar los li de una lista a la otra
  #3 (permalink)  
Antiguo 25/07/2011, 15:11
 
Fecha de Ingreso: marzo-2009
Mensajes: 18
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: jQuery evitar duplicados en el drag y drop

Hola Dany_s.

Muchas gracias por tu respuesta, la idea es muy buena, pero una duda: ¿en vez de dataIndex no se podría comprobar el contenido del li, es decir, si quiero arrastrar el li "dos" de la lista #uno, que compruebe en la lista #dos si existe el li "dos"?

Además de que si es posible preferiría evitar el crear un li y el appendTo.

Un saludo.
  #4 (permalink)  
Antiguo 25/07/2011, 15:16
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 4 meses
Puntos: 65
Respuesta: jQuery evitar duplicados en el drag y drop

si como quieras

¿por lo de "evitar el crear un li" te refieres a pasar un li al otro ul?
  #5 (permalink)  
Antiguo 25/07/2011, 15:26
 
Fecha de Ingreso: marzo-2009
Mensajes: 18
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: jQuery evitar duplicados en el drag y drop

Exacto, me refería a eso.

Y lo de comprobar el contenido del li supongo que es el innerHTML o algo así.

Saludos.
  #6 (permalink)  
Antiguo 26/07/2011, 06:33
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 4 meses
Puntos: 65
Respuesta: jQuery evitar duplicados en el drag y drop

Código HTML:
Ver original
  1.     <head>
  2.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  3.         <title>JSP Page</title>
  4.         <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
  5.         <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.min.js"></script>
  6.     </head>
  7.     <script>
  8.     $( function(){
  9.         $( "#uno li" ).draggable({helper:'clone'});
  10.  
  11.         $( "#dos" ).droppable({
  12.             accept: "#uno li",
  13.             drop: function( event, ui ){
  14.                 $("#dos").append( ui.draggable );
  15.             }
  16.         });
  17.     });
  18.     </script>
  19.     <style>
  20.         ul{min-height:50px; width:50px; background:#ccc}
  21.     </style>
  22.     <body>
  23.  
  24.     <ul id="uno">
  25.         <li>Uno</li>
  26.         <li>Dos</li>
  27.         <li>Tres</li>
  28.     </ul>
  29.  
  30.     <ul id="dos">
  31.  
  32.     </ul>
  33.  
  34.     </body>
  35. </html>
  #7 (permalink)  
Antiguo 26/07/2011, 14:29
 
Fecha de Ingreso: marzo-2009
Mensajes: 18
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: jQuery evitar duplicados en el drag y drop

Bueno, en tu ejemplo lo que hace es mover el li a otro ul. Yo me refería más bien a copiar, pero siempre comprobando que no exista el elemento a copiar en el 2º ul, como en el ejemplo que hiciste con el index() y el appendTo, pero buscando otra forma de comprobar.

Etiquetas: drag, drop, duplicados
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 00:56.