Hirdetés

Hirdetés

Új hozzászólás Aktív témák

  • Sk8erPeter

    nagyúr

    válasz trisztan94 #10512 üzenetére

    Attól függ, mi a cél (nem "jobb", csak más a hatás).

    Itt meséltem el pont neked korábban az event.preventDefault() és return false közötti különbséget:
    http://prohardver.hu/tema/jquery_kerdesek/hsz_2110-2110.html

    Itt van egy nagyon jó szemléltető példa:
    http://css-tricks.com/return-false-and-prevent-default/
    --> http://css-tricks.com/examples/ReturnFalse/

    lényeg:
    Van két <div>-doboz (legyen ez egy-egy szülődoboz), amibe bele van dobálva egy-egy link (<a>); de mivel a link display:block; stílusú, az is kvázi egy-egy gyerekdoboz.
    A burkoló szülődobozra kattintáskor be van állítva, hogy a háttér változzon pirosra. Aztán a gyerekelemek (egy-egy link, <a>-elem) kattintás eseménye is le van kezelve: kattintáskor a feladat, hogy a gyerekdoboz (a linkek) háttere zöldre változzon. De a linknek ugye van egy alapértelmezett viselkedése a böngészőkben, az, hogy valamilyen hivatkozásra ugrik, legyen az adott betöltött lapon belüli hivatkozás (anchor - ha nincs olyan anchor a lapon, akkor csak a lap tetejére ugrik), vagy másik URL-re hivatkozás (frissítés érdekében persze lehet ugyanaz az URL is); így az alapértelmezett viselkedést felül kell bírálni, hogy ne ugráljon sehova.
    A linkek alapértelmezett lekezelésének felülbírálására vonatkozik az event.preventDefault(), az event.stopPropagation(), valamint a return false. A return false tartalmazza az event.stopPropagation()-t, valamint az event.preventDefault()-ot is.
    Az event.preventDefault() segítségével megakadályozzuk a böngésző alapértelmezett műveletének végrehajtását.
    Az event.stopPropagation() segítségével megakadályozzuk, hogy az esemény bekövetkezése kvázi buborékként felússzon a DOM-fában, tehát hogy a szülők is értesüljenek az esemény bekövetkezéséről.

    A példára visszatérve látható a gyakorlati haszna is.
    Bármelyik gyerekdobozra kattintasz, a háttér zöldre változik. Itt jön a különbség: a bal oldali gyerekdoboznál az eseménykezelőben csak e.preventDefault();-ot, jobb oldalt return false;-t használ. Különbség: a bal oldalon felszivárog az esemény a szülőbe is, így a szülő click eseménykezelője is tud mit kezdeni az eseménnyel, így a szülődoboz háttérszíne is megváltozik, a példában pirosra. Jobb oldalt megakadályoztuk az implicit event.stopPropagation() segítségével, hogy a szülő is értesüljön a click eseményről, így a szülőjének a doboza nem változik piros hátterűvé.

    Remélem, nagyjából érthető. :)

    Sk8erPeter

Új hozzászólás Aktív témák