Foros del Web » Programando para Internet » Javascript »

Drag and Drop de Filas en una Tabla

Estas en el tema de Drag and Drop de Filas en una Tabla en el foro de Javascript en Foros del Web. Manes como se hace para que las filas de una se puedan mover y rehubicar, me baje este codigo pero no funciona @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 18/01/2011, 12:57
 
Fecha de Ingreso: enero-2011
Mensajes: 49
Antigüedad: 13 años, 11 meses
Puntos: 0
Pregunta Drag and Drop de Filas en una Tabla

Manes como se hace para que las filas de una se puedan mover y rehubicar, me baje este codigo pero no funciona

Código HTML:
Ver original
  1. <head>    
  2.     <style type="text/css">
  3.         tr, tr td {
  4.             border: 1px #999999 solid;
  5.             border-bottom: 2px #999999 solid;
  6.             background-color: #FFFFFF;}
  7.         tr.underline, tr.underline td {
  8.             border-bottom: 2px #000000 solid;
  9.             background-color: #CCCCCC;}
  10.            
  11.     </style>
  12. <script type="text/javascript">
  13.     var draggingRow = false;
  14.     var sourceRow = null;
  15.     function startedDragging()
  16.     {
  17.         draggingRow = true;
  18.         sourceRow = event.srcElement.parentNode.parentNode;
  19.     }
  20.     function dragEnter()
  21.     {
  22.         if (draggingRow) window.event.returnValue = false;
  23.     }
  24.     function dragOver()
  25.     {
  26.         if (draggingRow)
  27.         {
  28.             var targetRow = event.srcElement;
  29.             while (targetRow.parentNode != null && targetRow.tagName && targetRow.tagName.toLowerCase() != 'tr')
  30.                 targetRow = targetRow.parentNode;
  31.             targetRow.className = 'underline';
  32.             window.event.returnValue = false;
  33.         }
  34.     }
  35.     function dragLeave()
  36.     {
  37.         if (draggingRow)
  38.         {
  39.             var targetRow = event.srcElement;
  40.             while (targetRow.parentNode != null && targetRow.tagName && targetRow.tagName.toLowerCase() != 'tr')
  41.                 targetRow = targetRow.parentNode;
  42.             targetRow.className = '';
  43.         }
  44.     }
  45.     function dropped()
  46.     {
  47.         if (draggingRow)
  48.         {
  49.             targetRow = event.srcElement;
  50.             while (targetRow.parentNode != null && targetRow.tagName && targetRow.tagName.toLowerCase() != 'tr')
  51.                 targetRow = targetRow.parentNode;
  52.             targetRow.className = '';
  53.             sourceRow.swapNode(targetRow);
  54.             draggingRow = false;
  55.         }
  56.     }
  57.     var iconForDragging = '#define icon_width 4\n#define icon_height 4\nstatic char icon_bits[] = { 0x05, 0x0A, 0x05, 0x0A };';
  58.  
  59. </head>
  60. <body ondrop="dropped();">
  61. <table id="dragDropTable" border="0" cellpadding="2" cellspacing="0">
  62.     <tr ondragenter="dragEnter();" ondragover="dragOver();" ondragleave="dragLeave();">
  63.         <td><img src="javascript:iconForDragging;" width="16" height="16" ondragstart="startedDragging();"></td>
  64.         <td>Row 0, Cell 1</td>
  65.         <td>Row 0, Cell 2</td>
  66.         <td>Row 0, Cell 3</td>
  67.     </tr>
  68.     <tr ondragenter="dragEnter();" ondragover="dragOver();" ondragleave="dragLeave();" ondrop="dropped();">
  69.         <td><img src="javascript:iconForDragging;" width="16" height="16" ondragstart="startedDragging();"></td>
  70.         <td>Row 1, Cell 1</td>
  71.         <td>Row 1, Cell 2</td>
  72.         <td>Row 1, Cell 3</td>
  73.     </tr>
  74.     <tr ondragenter="dragEnter();" ondragover="dragOver();" ondragleave="dragLeave();" ondrop="dropped();">
  75.         <td><img src="javascript:iconForDragging;" width="16" height="16" ondragstart="startedDragging();"></td>
  76.         <td>Row 2, Cell 1</td>
  77.         <td>Row 2, Cell 2</td>
  78.         <td>Row 2, Cell 3</td>
  79.     </tr>
  80. </body>
  81. </html>

Saludos
  #2 (permalink)  
Antiguo 18/01/2011, 14:20
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 14 años, 6 meses
Puntos: 63
Respuesta: Drag and Drop de Filas en una Tabla

bueno la verdad no se si te ayude mucho pero leete las nuevas funciones de HTML5 entre las cuales se ha agregado el atributo drag and drop a ciertos objetos... espero que te sirva de algo..
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #3 (permalink)  
Antiguo 18/01/2011, 16:46
 
Fecha de Ingreso: diciembre-2010
Mensajes: 10
Antigüedad: 14 años
Puntos: 1
Respuesta: Drag and Drop de Filas en una Tabla

Código HTML:
Ver original
  1.    
  2.       <head>    
  3.    
  4.         <script language="JavaScript" type="text/javascript">
  5.     /*<![CDATA[*/
  6.     var zxcDObj;
  7.     var zxcDTable=[];
  8.    
  9.     function zxcInitDragRow(zxcid){
  10.      var zxctable=document.getElementById(zxcid);
  11.      zxcDTable.push([zxctable,zxctable.rows[0].cells.length]);
  12.      zxcclone=zxcES(zxctable.cloneNode(true),{position:'absolute'},document.getElementsByTagName('BODY')[0]);
  13.      var zxctbdy=zxcclone.getElementsByTagName('TBODY')[0];
  14.      while (zxctbdy.firstChild) zxctbdy.removeChild(zxctbdy.firstChild);
  15.      var zxcrows=zxctable.rows;
  16.      for (var zxc0=0;zxc0<zxcrows.length;zxc0++){
  17.       zxcrows[zxc0].clone=zxcclone;
  18.       zxcrows[zxc0].table=zxctable;
  19.       zxcAddEvt(zxcrows[zxc0],'zxcDragRowSrt','mousedown');
  20.      }
  21.     }
  22.    
  23.     function zxcDragRowSrt(zxcevt){
  24.      if (this.table.rows.length<1) return;
  25.      document.onselectstart=function(event){window.event.returnValue=false; }
  26.      var zxcclone=zxcES(this.cloneNode(true),{left:zxcPos(this)[0]+'px',top:zxcPos(this)[1]+'px'},this.clone.getElementsByTagName('TBODY')[0]);
  27.      zxcES(this.clone,{left:zxcPos(this)[0]+'px',top:zxcPos(this)[1]+'px'});
  28.      var zxccells=this.cells;
  29.      for (var zxc0=0;zxc0<zxccells.length;zxc0++) zxcES(zxcclone.cells[zxc0],{width:zxccells[zxc0].width});
  30.      zxcDObj=[this.clone,this.clone.offsetLeft-zxcMse(zxcevt)[0],this.clone.offsetTop-zxcMse(zxcevt)[1],this];
  31.     }
  32.    
  33.     function zxcDragRow(zxcevt){
  34.      if (zxcDObj){
  35.       zxcES(zxcDObj[0],{left:(zxcMse(zxcevt)[0]+zxcDObj[1])+'px',top:zxcMse(zxcevt)[1]+zxcDObj[2]+'px'});
  36.       return false;
  37.      }
  38.     }
  39.    
  40.     function zxcRowMseUp(){
  41.      document.onselectstart=null;
  42.      if (!zxcDObj) return;
  43.      for (var zxc0=0;zxc0<zxcDTable.length;zxc0++){
  44.       var zxctpos=zxcPos(zxcDTable[zxc0][0]);
  45.       if (zxcDObj[3]&&zxcDTable[zxc0][1]==zxcDObj[3].cells.length&&zxctpos[0]-10<zxcDObj[0].offsetLeft&&zxctpos[0]+zxcDTable[zxc0][0].offsetWidth>zxcDObj[0].offsetLeft&& zxctpos[1]-zxcDObj[3].offsetHeight<zxcDObj[0].offsetTop &&zxctpos[1]+zxcDTable[zxc0][0].offsetHeight>zxcDObj[0].offsetTop){
  46.        var zxctrs=zxcDTable[zxc0][0].rows;
  47.        for (var zxc0a=0;zxc0a<zxcDTable[zxc0][1];zxc0a++) zxcES(zxcDObj[3].cells[zxc0a],{width:zxcDTable[zxc0][0].rows[0].cells[zxc0a].offsetWidth+'px'})
  48.        for (var zxc0b=0;zxc0b<zxctrs.length;zxc0b++){
  49.         if (zxcPos(zxctrs[zxc0b])[1]>zxcPos(zxcDObj[0])[1]&&zxctrs[zxc0b]!=zxcDObj[3]){
  50.          zxctrs[0].parentNode.insertBefore(zxcDObj[3],zxctrs[zxc0b]);
  51.          zxcDObj[3]=null;
  52.          break;
  53.         }
  54.        }
  55.        if (zxcDObj[3]) zxctrs[0].parentNode.appendChild(zxcDObj[3]);
  56.       }
  57.      }
  58.      var zxctr=zxcDObj[0].getElementsByTagName('TR')[0];
  59.      if (zxctr) zxctr.parentNode.removeChild(zxctr);
  60.      zxcDObj=false;
  61.     }
  62.    
  63.     function zxcMse(e){
  64.       if (!document.all){ return [e.clientX+zxcDocS()[0],e.clientY+zxcDocS()[1]] }
  65.       else { return [event.clientX,event.clientY]; }
  66.     }
  67.    
  68.     function zxcDocS(){
  69.      if (!document.body.scrollTop){ return [document.documentElement.scrollLeft,document.documentElement.scrollTop]; }
  70.      else { return [document.body.scrollLeft,zxcsy=document.body.scrollTop]; }
  71.     }
  72.    
  73.     function zxcES(zxcele,zxcstyle,zxcp,zxctxt){
  74.      if (typeof(zxcele)=='string'){ zxcele=document.createElement(zxcele); }
  75.      for (key in zxcstyle){ zxcele.style[key]=zxcstyle[key]; }
  76.      if (zxcp){ zxcp.appendChild(zxcele); }
  77.      if (zxctxt){ zxcele.appendChild(document.createTextNode(zxctxt)); }
  78.      return zxcele;
  79.     }
  80.    
  81.     function zxcPos(zxcobj){
  82.      zxclft=zxcobj.offsetLeft;
  83.      zxctop=zxcobj.offsetTop;
  84.      while(zxcobj.offsetParent!=null){
  85.       zxcpar=zxcobj.offsetParent;
  86.       zxclft+=zxcpar.offsetLeft;
  87.       zxctop+=zxcpar.offsetTop;
  88.       zxcobj=zxcpar;
  89.      }
  90.      return [zxclft,zxctop];
  91.     }
  92.    
  93.     function zxcEventAdd(zxco,zxct,zxcf) {
  94.      if ( zxco.addEventListener ){ zxco.addEventListener(zxct, function(e){ return zxco[zxcf](e);}, false); }
  95.      else if ( zxco.attachEvent ){ zxco.attachEvent('on'+zxct,function(e){ return zxco[zxcf](e); }); }
  96.      else {
  97.       var zxcPrev=zxco["on" + zxct];
  98.       if (zxcPrev){ zxco['on'+zxct]=function(e){ zxcPrev(e); zxco[zxcf](e); }; }
  99.       else { zxco['on'+zxct]=zxco[zxcf]; }
  100.      }
  101.     }
  102.    
  103.     function zxcAddEvt(zxcobj,zxcfun,zxcevt){
  104.      if (zxcobj['zxcadd'+zxcfun+zxcevt]) return;
  105.      zxcobj['zxcadd'+zxcfun+zxcevt]=window[zxcfun];
  106.      zxcEventAdd(zxcobj,zxcevt,'zxcadd'+zxcfun+zxcevt);
  107.     }
  108.     zxcAddEvt(document,'zxcDragRow','mousemove');
  109.     zxcAddEvt(document,'zxcRowMseUp','mouseup');
  110.     /*]]>*/
  111.        
  112.  
  113.       </head>
  114.  
  115.       <body onload="zxcInitDragRow('dragDropTable')">
  116.  
  117.       <table id="dragDropTable" border="2" cellpadding="2" cellspacing="0">
  118.  
  119.       <thead>
  120.  
  121.       </thead>
  122.  
  123.       <tbody>
  124.  
  125.           <tr>
  126.  
  127.               <td><img src="javascript:iconForDragging;" width="16" height="16" ondragstart="startedDragging();"></td>
  128.  
  129.               <td>Row 0, Cell 1</td>
  130.  
  131.               <td>Row 0, Cell 2</td>
  132.  
  133.               <td>Row 0, Cell 3</td>
  134.  
  135.           </tr>
  136.  
  137.           <tr>
  138.  
  139.               <td><img src="javascript:iconForDragging;" width="16" height="16" ondragstart="startedDragging();"></td>
  140.  
  141.               <td>Row 1, Cell 1</td>
  142.  
  143.               <td>Row 1, Cell 2</td>
  144.  
  145.               <td>Row 1, Cell 3</td>
  146.  
  147.           </tr>
  148.  
  149.           <tr>
  150.  
  151.               <td><img src="javascript:iconForDragging;" width="16" height="16" ondragstart="startedDragging();"></td>
  152.  
  153.               <td>Row 2, Cell 1</td>
  154.  
  155.               <td>Row 2, Cell 2</td>
  156.  
  157.               <td>Row 2, Cell 3</td>
  158.  
  159.           </tr>
  160.  
  161.       </tbody>
  162.  
  163.       <tfoot></tfoot>
  164.  
  165.       </table>
  166.  
  167.       </body>
  168.  
  169.       </html>

mira este codigo lo puedes copiar completo y funciona, tiene un errorsillo quizas lo puedas solucionar tambien en el <body onload="zxcInitDragRow('dragDropTable')"> se hace referencia a la tabla por su "id" puedes usar dos tablas para pasar filas entre ellas esto lo harias asi:

<body onload="zxcInitDragRow('tabla1');zxcInitDragRow('t abla2');">

saludos.
  #4 (permalink)  
Antiguo 18/01/2011, 23:15
 
Fecha de Ingreso: septiembre-2010
Mensajes: 525
Antigüedad: 14 años, 2 meses
Puntos: 59
Aquí explica como puedes hacer eso, pero está en inglés.

__________________
01011111 01000001 01100100 01110010 01101001 01100001 01101110 01011111
  #5 (permalink)  
Antiguo 19/01/2011, 13:12
 
Fecha de Ingreso: enero-2011
Mensajes: 49
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Drag and Drop de Filas en una Tabla

@lodoman codigo esta perfecto, pero quiero hacerlo para que las filas solo se puedan mover en la misma tabla solo para cambiar de posiciones a las filas, si lo hace pero cuando lo muevo la tabla cambia de tamaño. Como lo arreglo esto?

Saludos

Etiquetas: drag, drop, filas, tablas
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 01:32.