Foros del Web » Programando para Internet » Jquery »

body onload en jquery

Estas en el tema de body onload en jquery en el foro de Jquery en Foros del Web. Hola a todos!! mi problema es el siguiente, he desarrollado un informe en el que listo los datos de una talba, para ello he creado ...
  #1 (permalink)  
Antiguo 20/09/2010, 05:12
 
Fecha de Ingreso: octubre-2008
Ubicación: Plasencia
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 6
body onload en jquery

Hola a todos!!
mi problema es el siguiente, he desarrollado un informe en el que listo los datos de una talba, para ello he creado un div con style="overflow: overflow" para poder hacer scroll sobre los datos y dentro de este div tengo una tabla que contiene los datos. Pues bien, yo al cargar la página establezco un valor para el height de este div contenedor, para que se adapte al alto de la pantalla, el problema surge cuando la tabla muestra pocas filas como resultado de una busqueda por ejemplo, ya que en ese caso div queda vacío (a las celdas de la tabla les tengo puesto un borde para que de aspecto de grid). Para solventar este problema he creado una función que comprueba si el alto de la tabla es menor que el de el contenedor y en tal caso rellena la tabla con celdas vacias hasta alcanzar el alto del contendor, esta función funciona perfectamente cuando se da el caso de que la tabla es más baja que el contenedor, el problema es que cuando no es así también se ejecuta y ofrece un resultado no deseado, creo que el problema es debido a que la llamada a la función la tengo puesta dentro de $(document).ready(function(){ ... }); y cuando se ejecuta la función aún no han terminado de cargarse los datos de la tabla, he probado a ponerla dentro de $("body").load(function(){...}); pero no funciona, alguien tiene alguna alternativa a $(document).ready() que se ejecute cuando hayan terminado de cargarse todos los elementos de la página?
De antemano gracias y un saludo, a continuacion les muestro mi código:

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     parcheListadoIE();
  3.     ajustarAlturaAPantalla("div.listado",$("#cabecera").outerHeight()+$("#menu").outerHeight()+$("h1").outerHeight(true)+$("#botonera").outerHeight()+$("div.datos>table").outerHeight()+20);
  4.     rellenarListado();
  5. });
  6.  
  7. function rellenarListado(){
  8.     while($("div.listado table").outerHeight()<$("div.listado").innerHeight()){
  9.         $("div.listado tr:eq(0)").clone().appendTo("div.listado table").find("td").html("&nbsp;");
  10.     }
  11.     $("div.listado table tr:last").remove();
  12.     $("div.listado").css("height",$("div.listado table").outerHeight());
  13. }
  #2 (permalink)  
Antiguo 20/09/2010, 07:33
 
Fecha de Ingreso: abril-2008
Ubicación: MDQ
Mensajes: 54
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: body onload en jquery

Y comprobar que no tenga datos en vez de alto?

Que mire el primer tr o td y se fije si esta vacio y se ejecute.
  #3 (permalink)  
Antiguo 21/09/2010, 01:44
 
Fecha de Ingreso: octubre-2008
Ubicación: Plasencia
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: body onload en jquery

Cita:
Iniciado por chifliiiii Ver Mensaje
Y comprobar que no tenga datos en vez de alto?

Que mire el primer tr o td y se fije si esta vacio y se ejecute.
eso no me sirve por que puede que la tabla contega datos y aún así la función necesite ejecutarse, por ejemplo si el div contenedor tiene espacio para contener una tabla de 10 filas y la tabla tiene un número de filas menor que 10. Lo que necesito es que la función se ejecute si el alto de la tabla es menor que el de el div que la contiene, pero si la llamada a la función la realizo desde el $(document).ready esta se ejecuta aunque el alto de la tabla sea mayor que el del div y lo que hace es ajustarme el alto del div al de la tabla (esto solo sucede en mozilla, en internet explorer si que lo hace bien). Por esto, lo que necesitaría es que la función se ejecute cuando hayan terminado de cargarse los elementos de la página en lugar de cuando el DOM este listo, ¿alguna idea para hacer esto con jquery? una opcion sería poner la llamada a la función en el atributo onload de la etiqueta body pero esa opción no me gusta ya que prefiero utilizar javascript no intrusivo.
  #4 (permalink)  
Antiguo 23/09/2010, 08:07
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: body onload en jquery

Cita:
creo que el problema es debido a que la llamada a la función la tengo puesta dentro de $(document).ready(function(){ ... }); y cuando se ejecuta la función aún no han terminado de cargarse los datos de la tabla,
A mi me ha pasado lo mismo pero con imagenes.

Eso de load que intentaste está fuera de contexto. Load está referido a ajax en jquery.

Tendrías que usar onload como atributo de body, o en el bloque javascript.
http://www.desarrolloweb.com/articulos/1319.php
http://www.onlinetools.org/articles/.../chapter4.html

La diferencia entre el metodo javascript puro y el de jquery es que el primero espera a que todo haya cargadol . En cambio, jquery espera a que el dom esté construido, lo cual no implica calculos de width and height no declarados. Si me equivoco, por favor corrijan.
  #5 (permalink)  
Antiguo 23/09/2010, 08:58
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: body onload en jquery

Hay 2 métodos load en jquery que depende de los argunmentos que se le pasa.
El evento load http://api.jquery.com/load-event/
El método load de ajax http://api.jquery.com/load/

Fijate que este ejemplo agrega al body un texto cuando la imagen esta cargada completamente, es bastante grande la imagen

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  3.   <script>
  4.   $( function(){
  5.     $("img").load( function (){
  6.         $('body').prepend("Imagen cargada");
  7.     });
  8.   })
  9.   </script>
  10. </head>
  11.     <img src="http://lroc.sese.asu.edu/news/uploads/LROCiotw/M104634241LE_annotated.png">
  12. </body>
  13. </html>
  #6 (permalink)  
Antiguo 23/09/2010, 10:22
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: body onload en jquery

Ah! Ok, no lo sabía. Seguí el enlace y dice que se aplica a todo elemento que tenga un src:

Cita:
This event can be sent to any element associated with a URL: images, scripts, frames, iframes, and the window object.
Así que para tablas no iría bien. Pero el clasico onload si debería funcionar.
  #7 (permalink)  
Antiguo 24/09/2010, 04:39
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: body onload en jquery

se puede aplicar a la ventana actual

$(window).load...

¿podrias crear un html limpio con una tabla y postear? por ahi es otro problema porque esto funciona

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.   <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  3.   <script>
  4.     $( function(){
  5.         rellenarListado();
  6.     });
  7.  
  8.     function rellenarListado (){
  9.         nuevos = false;
  10.         while( $("div.listado table").outerHeight() < $("div.listado").innerHeight() ){
  11.            nuevos = true;
  12.            $("div.listado tr:eq(0)").clone().appendTo("div.listado table").find("td").html("nuevos");
  13.        }
  14.        if (nuevos)
  15.            $("div.listado table tr:last").remove();
  16.    }
  17.  </script>
  18.   <style>
  19.       div{height:200px; overflow:scroll}
  20.   </style>
  21. </head>
  22.     <div class="listado">
  23.         <table class="listado">
  24.             <tr>
  25.                 <td>resultado</td>
  26.                 <td></td>
  27.             </tr>
  28.             <tr>
  29.                 <td>resultado</td>
  30.                 <td></td>
  31.             </tr>
  32.             <tr>
  33.                 <td>resultado</td>
  34.                 <td></td>
  35.             </tr>
  36.             <tr>
  37.                 <td>resultado</td>
  38.                 <td></td>
  39.             </tr>
  40.             <tr>
  41.                 <td>resultado</td>
  42.                 <td></td>
  43.             </tr>
  44.             <tr>
  45.                 <td>resultado</td>
  46.                 <td></td>
  47.             </tr>
  48.             <tr>
  49.                 <td>resultado</td>
  50.                 <td></td>
  51.             </tr>
  52.             <tr>
  53.                 <td>resultado</td>
  54.                 <td></td>
  55.             </tr>
  56.             <tr>
  57.                 <td>resultado</td>
  58.                 <td></td>
  59.             </tr>
  60.         </table>
  61.     </div>
  62. </body>
  63. </html>

Última edición por Dany_s; 24/09/2010 a las 05:21

Etiquetas: body, onload
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 05:07.