Comunidad de diseño web y desarrollo en internet online

Drag & Drop.... & remove.. Duda de Jquery (javascript)

Citar            
MensajeEscrito el 05 Dic 2008 04:37 am
Hola a todos, despues de tratar 2 días no pude asi que finalmente recurri al foro.
Haber si pueden ayudarme.
Estoy haciendo una web simple, pero con hartos efectitos bonitos de jquery.
Yo soy de los que ocupan los paquetes *.js pero no lee mucho los scripts pq me cuesta caleta el javascript, pero estos últimos 2 días ya he visto tanto al respecto que de a poco voy entendiendo de que se trata.
en fin..
Quiero lograr lo siguiente:
de un "sortable list" (lista ordenable) creado con jquery en una web, poder enviar arrastrando un elemento de la lista a un div "basurero" y que este desaparesca de la lista y en el basurero tambien(no que quede como papelera de reciclaje)
Voy a mostrar un par de ejemplos y luego la web simple creada por mi para que se hagan una idea.

ejemplo1: jQuery UI Draggables and Droppables playground
en este ejemplo se arrastra una lista fija de fotos a una papelera o a un borrado definitivo. (es para hacerce una idea )
ejemplo2: UI Sortable: Layout Demo
en este otro ejemplo realizan exactamente lo que quiero. hay un div que se llama trashcan donde se eliminan los elementos.

el problema es que no le pego al javascript y no logro entender el codigo a cabalidad, ademas trae varias funciones más que me son inutiles para lo que quiero.

En fin y aquí va lo mío. (los elementos se arrastran desde los iconos)
ordenar y remover

adjunto el código fuente tambien..

Codigo html

Código :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>ordenar y votar :)</title>
<link rel="stylesheet" href="css/style.css" type="text/css" media="all"/>
<script type="text/javascript" src="js/jquery-1.2.6.js"></script>
<script type="text/javascript" src="js/ui.core.js"></script>
<script type="text/javascript" src="js/ui.sortable.js"></script>
<script type="text/javascript" src="js/ui.droppable.js"></script>
<script type="text/javascript" src="js/ui.draggable.js"></script>
<script type="text/javascript" src="demo.js"></script>

</head>

<body>
  <ul class="sortlist" id="sortlist1">
        <li id="listItem_1"><img src="arrow_out.png" class="icono" alt="move" />numero 1</li>
        <li id="listItem_2"><img src="arrow_out.png" class="icono" alt="move" />numero 2</li>
        <li id="listItem_3"><img src="arrow_out.png" class="icono" alt="move" />numero 3</li>
        <li id="listItem_4"><img src="arrow_out.png" class="icono" alt="move" />numero 4</li>
        <li id="listItem_5"><img src="arrow_out.png" class="icono" alt="move" />numero 5</li>
        <li id="listItem_6"><img src="arrow_out.png" class="icono" alt="move" />numero 6</li>
        <li id="listItem_7"><img src="arrow_out.png" class="icono" alt="move" />numero 7</li>
        <li id="listItem_8"><img src="arrow_out.png" class="icono" alt="move" />numero 8</li>
        <li id="listItem_9"><img src="arrow_out.png" class="icono" alt="move" />numero 9</li>
        <li id="listItem_10"><img src="arrow_out.png" class="icono" alt="move" />numero 10</li>
        <li id="listItem_11"><img src="arrow_out.png" class="icono" alt="move" />numero 11</li>
  </ul>
  <input name="sortlist" id="sortlist" type="text" size="135" readonly="true" />
  <div id="basurero" class="sortlist"></div>
</body>
</html>


codigo css file: style.css

Código :

/* CSS Document */

.sortlist {
    width: 700px;
    list-style: none;
    padding: 0;
    margin-top: 15px;
    margin-left: 15px;
}
.sortlist li {
    font-family:Arial, Helvetica, sans-serif;
    font-size: 12px;
    color: #333;
    width: 700px;
    margin: 0 0 5px 0;
    padding: 6px 15px 2px 10px;
}
.icono {

    float: left;
    margin-right: 10px;
    margin-top: -1px;
    padding-top: 0px;
    cursor: pointer;
}
#basurero {
    width:638px;
    height:200px;
    margin:0;
    background:#000;
}


y finalmente el codigo js (javascript) file: demo.js

Código :

// JavaScript Document

$(document).ready(function() {
  $('.sortlist').sortable({
      handle : '.icono',
      update : function () {
          $('input#sortlist').val($('.sortlist').sortable('serialize'));
      }
    });
});



Si me pueden ayudar se los agradecería muchisimo.

Por ganoncl

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Dic 2008 04:10 pm
te falta agregarle droppable al id "basurero", con esto debería funcionar:

$("#basurero").droppable({
accept: "#sortlist1",
drop: function(ev, ui) {
$(this).remove();
}
});
revisa tambien: http://docs.jquery.com/UI/Droppables

Por chug0

Claber

136 de clabLevel



 

Perú

firefox
Citar            
MensajeEscrito el 05 Dic 2008 06:44 pm
gracias por tu respuesta... me funciono pero a medias..
pues ahora tengo esto como código js

Código :

// JavaScript Document

$(document).ready(function() {
  $(".sortlist").sortable({
      handle : ".icono",
      update : function () {
        $("input#sortlist").val($(".sortlist").sortable("serialize"));
      }
    });
   $("#basurero").droppable({ 
    accept: ".sortlist li", 
    drop: function(ev, ui) { 
        $(this).append("eliminado!"); 
      } 
   });
});


sin embargo embargo no elimina el elemento de la lista :S
puedes ver el resultado que tengo hasta ahora en : http://www.propiedadesisrael.cl/sortlist/

Por ganoncl

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Dic 2008 06:46 pm
se me olvido decir que con la linea
$(this).remove();
se borra el basurero XD y no el elemento de la lista.

Por ganoncl

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Dic 2008 08:01 pm
al ojimetro:

Código Javascript :

$(this).find("miElemeto droppable").remove();

Por chug0

Claber

136 de clabLevel



 

Perú

firefox
Citar            
MensajeEscrito el 05 Dic 2008 10:11 pm
Disculpas tantas molestias pero esto ya me tiene un poco loco, de a poco estoy entendiendo, sin embargo, sucede lo siguiente:
al escribir:

Código :

$(this).find("li").remove();

no sucede nada...
luego cuando tengo

Código :

$("#basurero").droppable({ 
    accept: ".sortlist li", 
    drop: function(ev, ui) { 
       $("li").remove();
        $(this).append("eliminado!"); 
      } 
   });

y arrastro un item al basurero desaparecen todos..
luego haciendo prueba y error pongo la id de un elemento li, por ejemplo

Código :

$("#basurero").droppable({ 
    accept: ".sortlist li", 
    drop: function(ev, ui) { 
       $("#listItem_1").remove();
        $(this).append("eliminado!"); 
      } 
   });

entonces cuando arrastro un elemento li cualquiera al basurero siempre desaparece el listItem_1.

no se la sintaxis para decirle al remove()
*el elemento que estoy moviendo en este instante quiero que se elimine de la lista*

perdona las molestias, pero necesito aprender T_T

Por ganoncl

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Dic 2008 10:54 pm
probaste asi:

Código Javascript :

$("#basurero").droppable({ 
    accept: ".sortlist li", 
    drop: function(ev, ui) { 
       $(this).find("li").remove();
        $(this).append("eliminado!"); 
      } 
   });


y no funciona?

Por chug0

Claber

136 de clabLevel



 

Perú

firefox
Citar            
MensajeEscrito el 05 Dic 2008 11:07 pm

Por ganoncl

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Dic 2008 03:20 am
Al final me saliooo!!!!
despues de 30 horas tratando de que me salaga me puse a leer la documentación oficial de jquery ui..

pongo el js funcional para quienes lo necesiten a futuro....

Código :

// JavaScript Document

$(document).ready(function(){
  //hacer lista ordenable.
  $("ul.sortlist").sortable({
     items: '> li',
      cursor:"pointer",
     opacity: 0.7,
      handle : "img.icono",
      update : function () {
        $("input#sortlist").val($("ul.sortlist").sortable("serialize"));
      }
    });
  
  
  
  //hacer el div para botar cosas.
$('#basurero').droppable({
      accept: '.sortlist li',
      drop: function(ev, ui) {
         $(this).append("eliminado!");
         $(ui.draggable).remove();         
      }
   });  
});

Por ganoncl

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Dic 2008 03:59 pm
me puse a probar también y lo hice con fade out y luego el remove:

Código Javascript :

$(document).ready(function() {
 $("#sortlist1 li").draggable({helper: 'clone'});
 $("#basurero").droppable({ 
    accept: "#sortlist1 li", 
    drop: function(ev, ui) { 
      $(this).append($(ui.draggable));
      $(this).find(".ui-draggable").fadeOut(3000,function(){
         $(this).remove();
      });
      } 
   });
});

Por chug0

Claber

136 de clabLevel



 

Perú

firefox
Citar            
MensajeEscrito el 07 Dic 2008 02:09 pm
Excelente :)
lo bueno es que ya estoy entendiendo la lógica js.

Por ganoncl

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Dic 2008 07:29 pm

chug0 escribió:

me puse a probar también y lo hice con fade out y luego el remove:

Código Javascript :

$(document).ready(function() {
 $("#sortlist1 li").draggable({helper: 'clone'});
 $("#basurero").droppable({ 
    accept: "#sortlist1 li", 
    drop: function(ev, ui) { 
      $(this).append($(ui.draggable));
      $(this).find(".ui-draggable").fadeOut(3000,function(){
         $(this).remove();
      });
      } 
   });
});


notese lo siguiente eso si... eso solo sirve para elementos fijos arrastrables, pero no para la lista ordenable o sortlist

Por ganoncl

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Dic 2008 07:55 pm
deberia funcionar tambien cambiando solo draggable por sortable

Por chug0

Claber

136 de clabLevel



 

Perú

firefox
Citar            
MensajeEscrito el 08 Dic 2008 12:23 am
nop, no funciona...
pues la linea:
$(this).remove();
en la forma sortable list, borra al basurero..
pero cuando reemplazas el this por ui.draggable quedando asi
$(ui.draggable).remove();
funciona perfecto...

esto porque según la documentación:
ui.item - the current dragged element

********************
por otra parte, ahora estoy agregando items a la lista :P, he logrado bastante.. ,sin embargo, tengo una duda.
por ejemplo tengo los li de la siguiente forma:

Código HTML :

<ul class="sortable" id="sortable1">
        <li class="item" id="listItem_1">item 1</li>
        <li class="item" id="listItem_2">item 2</li>
        <li class="item" id="listItem_3">item 3</li>
        <li class="item" id="listItem_4">item 4</li>
        <li class="item" id="listItem_5">item 5</li>
</ul>

logré por ejemplo mediante el siguiente código agregar items de manera muy standar:

Código Javascript :

       //con el boton add ejecuto la siguiente función cuando hago click.
$('#add').click(function(){
      var input = $('input[name=newTask]').val();
      $(".sortable").append('<li class="item" id="listItem_X+1">' + input + '</li>');
      $("input#testlog").val($("ul.sortlist").sortable("serialize"))
   });


perooooooooo... no puedo hacer lo siguiente, quiero que del correlativo de li mediante js se capture el último id o en su defecto el li con la id mayor según listItem_X (sea X el número mayor del correlativo sortable list), de la lista.
Luego cuando inserte un nuevo item automaticamente la id sea listItem_X+1

Por ganoncl

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Dic 2008 12:30 am
En la respuesta anterior quize decir:

en la documentación se tiene:
ui.draggable - current draggable element

Por ganoncl

15 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.