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:
<script>
    $(document).ready(function(){
        $("#ok").bind('click', function(){
            alert('');
            $("#ok").remove();
            $('body').append("<p id='ok'>ok</p>");
        });
    });
</script>
</head>
<body>
    <p id='ok'>ok</p>
</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:
$('body').on('click', '#ok', function(e){
// ide jon az event handler
});
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):
    
$(function(){  
    // "anonim" funkciokat is el lehet nevezni, lasd meg: http://kangax.github.com/nfe/
    $("#ok").on('click', function ok_handler(){ 
        alert('');  
        $("#ok").remove();
        // uj domnode letrehozasa, handler elhelyezese, dokumentbe illesztese 
        // (elso ketto osszevonhato, lasd: http://api.jquery.com/jQuery/#jQuery2)
        $("<p id='ok'>ok</p>").on('click', ok_handler).appendTo($('body'));
    });  
});  
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