ugrás a tartalomhoz

jquery eseménykezelő "visszaragasztása"

mahoo · 2012. Nov. 3. (Szo), 20.31
Bocs a hülye címért meg az alap kérdésért, de nem sikerül megoldani, azt hogy az alábbi kódban a click esemény ne csak egyszer fusson le:
  1. <script>  
  2.     $(document).ready(function(){  
  3.         $("#ok").bind('click', function(){  
  4.             alert('');  
  5.             $("#ok").remove();  
  6.             $('body').append("<p id='ok'>ok</p>");  
  7.         });  
  8.     });  
  9. </script>  
  10. </head>  
  11. <body>  
  12.     <p id='ok'>ok</p>  
  13. </body>  
Egy kis info jól jönne, hogy minek nézzek utána. Köszönöm!
 
1

event delegation

complex857 · 2012. Nov. 3. (Szo), 21.16
Amit te keresel az az event delegation, ujabb jquery verziókban ehez hasonló szintaxissal érhető el:
  1. $('body').on('click''#ok'function(e){  
  2. // ide jon az event handler  
  3. });  
Ilyenkor a <body> elemre kerül a handler (választhatsz mást is, ezzel csökkentve a handler "hatósugarát"), es amikor a click event bubbling során felér odáig megnézi, hogy a 2. paraméterre illeszkedik-e elem és ha igen, akkor lefuttatja a handler a megfelelő this -el.

Másik lehetőség, hogy az event handler function -ban lévő érdemi kódót kiszervezed valahova és amikor új domnode -ot szúrsz be akkor újra rábindeled, de ez valamivel erőforrásigényesebb.
2

Köszönöm a gyors segítséget,

mahoo · 2012. Nov. 3. (Szo), 21.52
Köszönöm a gyors segítséget, tökéletesen működik!
De mutatnál egy példát a másik lehetőségre is, mert én azzal próbálkoztam és csak szeretném látni a jó megoldást ebben a verzióban is. Köszi...
3

Valami ilyesmit képzelek el

complex857 · 2012. Nov. 3. (Szo), 22.09
Valami ilyesmit képzelek el (demo):
  1.       
  2. $(function(){    
  3.     // "anonim" funkciokat is el lehet nevezni, lasd meg: http://kangax.github.com/nfe/  
  4.     $("#ok").on('click'function ok_handler(){   
  5.         alert('');    
  6.         $("#ok").remove();  
  7.         // uj domnode letrehozasa, handler elhelyezese, dokumentbe illesztese   
  8.         // (elso ketto osszevonhato, lasd: http://api.jquery.com/jQuery/#jQuery2)  
  9.         $("<p id='ok'>ok</p>").on('click', ok_handler).appendTo($('body'));  
  10.     });    
  11. });    
4

Köszönöm még1x, kipróbálom

mahoo · 2012. Nov. 3. (Szo), 22.42
Köszönöm még1x, kipróbálom ezt is!
5

http://api.jquery.com/live/

mgergo90 · 2012. Nov. 15. (Cs), 17.09
http://api.jquery.com/live/
6

As of jQuery 1.7, the .live()

Poetro · 2012. Nov. 15. (Cs), 17.51
As of jQuery 1.7, the .live() method is deprecated.
Használjuk helyette inkább az on-t, vagy régebbi jQuery esetén a delegate-et