elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Es necesario hacer unbind en jQuery?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Es necesario hacer unbind en jQuery?  (Leído 3,335 veces)
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Es necesario hacer unbind en jQuery?
« en: 22 Febrero 2012, 15:37 pm »

Hola.

Tengo una sección del sitio WEB que se sobreescriben botones, no apareciendo y desapareciendo sino agregando y eliminando para ahorrar memoria ya que son muchisimos botones.

Mi duda es la siguiente:

Cáda ves que aparece un botón este debe realizar una acción al hacer click por lo tanto cómo puedo definirle la función?
Si intento darle una propiedad onclick="funcion()" no me funciona ya que funcion() está definida dentro de $(document)ready(function(){... por lo tanto no es accesible desde afuera.
Lo otro que intento es crear un $('#boton').click(function(){... pero al eliminar el botón se elimina la asociación de la función con el botón y al hacer aparecer uno nuevo queda sin asociación.

Para solucionar esto lo que hice fue una función llamada reDOM(){ ... } que incluye todas las asociaciones con los botones...

Código
  1. function reDom(){
  2. $('.boton').each(function(){
  3. $(this).click(function(){
  4. // Accion
  5. });
  6. });
  7. }

Hasta ahi todo bién, funciona de lujo porque cáda ves que elimino y agrego un botón llamo la función reDOM() y vuelve a asociar las funciones a los nuevos inputs incluyendo a los inputs que ya estaban.

Mi duda es la siguiente...
Cuando se desasocian o sea se elimina el botón y aparece otro esta asociación queda en memoria o automaticamente se elimina? es necesario hacer un unbind antes de eliminar el botón? ya que son mcuhos botones que aparecen y desaparecen y si quedan en memoria entonces va a causar que con el tiempo la web se vea lenta y me haga refrescar forzadamente.

El caso de los botones era solo un ejemplo ya que en la práctica son divisiones de una barra de busqueda que se renueva en cáda petición Ajax con $('#barra').html(request.barr) y necesito asociar las acciones a cáda división, pasar el mouse por encima, hacerle click, etc, pero me preocupa si las funciones aun están quedando en el DOM o se van eliminando solas.

Gracias para el que me pueda ayudar.


En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: Es necesario hacer unbind en jQuery?
« Respuesta #1 en: 24 Febrero 2012, 07:05 am »

Hola,

Hay una pregunta mas o menos igual que la tuya en el foro de jQuery.

Pregunta
Citar
I have some pages where I'm adding elements, then attaching click
event handlers to them. Later on (based on user interaction), those
elements are being removed from the page.
Is there any benefit to calling unbind('click') on those elements
before I remove() them? Or does remove() effectively remove that
click handler from memory as well?

Respuesta
Citar
From the docs:
"Note that this function starting with 1.2.2 will also remove all event handlers and internally cached data."

http://api.jquery.com/remove/#expr


Saludos


En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Es necesario hacer unbind en jQuery?
« Respuesta #2 en: 27 Febrero 2012, 13:59 pm »

aaah super, o sea que habría que llamar a remove() y después sobreescribir con html(), buén tip, o sea que si sobreescribo directamente todo el contenido con html() voy a mantener en la memoria los handlers y se pondría mas pesado el sitio WEB.
De todas formas esto en Internet explorer haría que se demorar un poco mas su ejecución pero lo haría mas ligero.

El problema ahora sería eliminar todo lo que está dentro de la división antes de aplicarle .html() ya que remove() elimina una división del DOM pero completa y no solo su contenido.
Para esto tendría que usar empty() pero ahora el dilema es... empty() eliminará correctamente la memoria al igual que remove() ?, supongo que si pero de todas formas lo usaré.

Gracias drvy | BSM.

Edito:
Citar
[jQuery 1.7.1 http://jquery.com | jQuery UI 1.8.18 http://jqueryui.com | jQuery Mobile 1.0.1 http://jquerymobile.com | Docs: http://api.jquery.com | Paste your code at http://jsfiddle.net ♥ Just ask! No PMs, plz. ♥ -- Mobile support #jquerymobile | Development Channels #jquery-dev #jqueryui-dev #jquerymobile-dev | This channel is publicly logged to http://irc.jquery.com]
[10:02] == WHK [be62d7cb@gateway/web/freenode/ip.000.000.000.000] has joined #jquery
[10:02] <WHK> Helo
[10:02] <WHK> a question please
[10:02] == blackspotwiggins [~blackspot@94.169.191.90.dyn.estpak.ee] has quit [Quit: Leaving]
[10:02] <WHK> the funcion empty() delete all handlers of objects?
[10:03] <WHK> for example...
[10:04] <WHK> <div id="a"><div id="b"></div></div> ... $('#b').click(function(){ alert(0); }); $('#a').empty();
[10:04] <Cork> WHK: events are added to the dom through addEventListner
[10:04] <Cork> so the browser handles removing them when it cleans up the dom tree
[10:04] <WHK> the empty() remove click event of memory?
[10:04] <WHK> ooh
[10:05] <mattfieldy> empty() removes event handlers from the child elements before removing the elements themselves
[10:05] <WHK> Thanks :)

Si lo elimina, según dicen la función empty() elimina los eventos antes de eliminar los objetos :)
« Última modificación: 27 Febrero 2012, 14:07 pm por WHK » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Es necesario pasar el AVI a MPG
Multimedia
paul_cienfuegos 1 2,226 Último mensaje 28 Diciembre 2004, 08:02 am
por Songoku
Zuckerberg afirma que Facebook 'no es necesario ni suficiente' para hacer la ...
Noticias
wolfbcn 0 1,530 Último mensaje 26 Mayo 2011, 01:47 am
por wolfbcn
[jquery] Hacer galeria jiratoria automatica ? (solved)
PHP
Diabliyo 7 5,770 Último mensaje 22 Febrero 2012, 20:07 pm
por Diabliyo
como hacer if responsive jquery/css
Desarrollo Web
d91 2 1,759 Último mensaje 23 Noviembre 2015, 11:50 am
por d91
[Pregunta]: document.ready jquery no sería tan necesario acá, no?
Desarrollo Web
Leguim 0 2,132 Último mensaje 4 Noviembre 2020, 22:35 pm
por Leguim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines