tag:blogger.com,1999:blog-2461576666827389205.post4252923882731502123..comments2023-02-28T15:09:53.047+01:00Comments on Technical bites: Event Delegation en JavascriptAnonymoushttp://www.blogger.com/profile/00861694134004677325noreply@blogger.comBlogger8125tag:blogger.com,1999:blog-2461576666827389205.post-8817537453862396042010-08-04T21:53:34.139+02:002010-08-04T21:53:34.139+02:00El método para implementar Event Delegation en jQu...El método para implementar Event Delegation en jQuery es el siguiente: http://api.jquery.com/live/amonacohttps://www.blogger.com/profile/02291633027885571187noreply@blogger.comtag:blogger.com,1999:blog-2461576666827389205.post-7238961328067399712010-04-20T15:43:43.473+02:002010-04-20T15:43:43.473+02:00men... mira quiero abrir mi blog pero al momento d...men... mira quiero abrir mi blog pero al momento de poner mi codigo queda un desparramo horrible, como lo as echo tu mi correo es cod.matriz@gmail.comCore The Machinehttps://www.blogger.com/profile/14297392579516222747noreply@blogger.comtag:blogger.com,1999:blog-2461576666827389205.post-55857226821088980332010-03-02T01:40:11.853+01:002010-03-02T01:40:11.853+01:00Diego, te entendí mal.. pensaba que habías añadido...Diego, te entendí mal.. pensaba que habías añadido específicamente un div solamente para los radio buttons, por eso decía lo de añadir marcado de más y sugería usar mejor el ID del Form directamente.<br /><br />Esto te pasa por no pegar el html ;)javier ramirezhttp://javier-ramirez.comnoreply@blogger.comtag:blogger.com,1999:blog-2461576666827389205.post-47044056845907088612010-03-01T23:55:42.754+01:002010-03-01T23:55:42.754+01:00Sam, como dice Javi, el tema de hacerlo en prototy...Sam, como dice Javi, el tema de hacerlo en prototype ha sido simplemente porque el proyecto está en prototype. Está claro que la solución más sencilla es con jquery.<br /><br />Javi, lo que comentas de añadir más marcado, no se ha añadido más marcado, simplemente se ha utilizado el contenedor de los formularios para delegar los eventos.<br /><br />Usando delegación de eventos, creo tiene más sentido utilizar el contenedor, que crear un evento por formulario. Otra cosa es que realmente tenga sentido delegar en este caso.... no tengo claro si es más eficiente crear 12 eventos (en mi caso eran 4 formularios con 3 radio button por formulario) o un único evento más complejo. <br /><br />Como dice Paco, si se me hubiera ocurrido la solución con invoke, probablemente no habríamos usado delegación.<br /><br />Por último, como curiosidad, en rails 3 con prototype, todos los eventos se delegan desde el document.body<br /><br />Gracias por los comentarios :-)Anonymoushttps://www.blogger.com/profile/00861694134004677325noreply@blogger.comtag:blogger.com,1999:blog-2461576666827389205.post-72284528137940741082010-03-01T11:53:26.172+01:002010-03-01T11:53:26.172+01:00No conocía el invoke de prototype
Utilizando invo...No conocía el invoke de prototype<br /><br />Utilizando invoke queda más sencillo lo que quería hacer Diego, con este método no hubieramos llegado al uso de delegación de eventos.Paco Guzmannoreply@blogger.comtag:blogger.com,1999:blog-2461576666827389205.post-88575553442819399102010-02-27T15:05:44.385+01:002010-02-27T15:05:44.385+01:00Sam, en este caso la solución de prototype se pare...Sam, en este caso la solución de prototype se parece bastante a la de jQuery. De acuerdo que la de jQuery es ligeramente menos verbosa, pero no justificaría cambiar a jQuery si tu proyecto está todo montado con prototype.<br /><br />De todos modos, estoy contigo en que jQuery es más mono ;)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-2461576666827389205.post-76013675714988696272010-02-27T14:47:40.528+01:002010-02-27T14:47:40.528+01:00A mí hay una cosa que no me gusta en esa solución....A mí hay una cosa que no me gusta en esa solución. Estamos usando javascript no molesto/obstructor -obstrusivo significa obstructor, no intrusivo ;) - y para evitarlo ¿pretendes añadirle más marcado?<br /><br />No me parece limpio. Creo que debemos usar tan poco marcado como sea posible. En este caso, bastaría con darle un ID al form y usar el form como el objeto al que delegarle los eventos.<br /><br />En cualquier caso, no termino de verle la ventaja a la delegación de eventos en este caso concreto. Me parece que es complicar innecesariamente el asunto asignándole responsabilidad al padre de algo que depende en exclusiva del hijo y teniendo que preguntar por el target.<br /><br />Usando prototype puedes conseguir de forma limpia lo mismo usando directamente el elemento destino. Además si en vez de usar parentNode usas up como recomendaba @pacoguzman, tienes la ventaja de que te pueden cambiar el html tanto como quieran y tus eventos seguirán funcionando. <br /><br />document.observe("dom:loaded", function() {<br /> $$('input.radio_submit').invoke('observe','click', function() {<br /> this.up('form').submit();<br /> });<br />});<br /><br />Igual me he perdido algo de por qué es mejor delegar, pero en este caso no lo veo nada claro.<br /><br />Si me convences compro tu solución (refactorizada con el ID del form), pero si no, me gusta más la mía :)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-2461576666827389205.post-51928675948122244352010-02-27T14:38:18.826+01:002010-02-27T14:38:18.826+01:00Usa jQuery! Mucho más sencillo:
$(document).r...Usa jQuery! Mucho más sencillo:<br /><br /> $(document).ready(function() {<br /> $('input.radio_submit').click(function() {<br /> $(this).parents('form').submit();<br /> });<br /> });<br /><br /><br />samSam Lownhttp://www.samlown.comnoreply@blogger.com