Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Sivun hyppäys jQuery slideToggle

pistemies [05.03.2013 13:54:55]

#

Laittelin pientä viritelmää, jolla saa halutessaan linkistä sivupalkin näkyviin absolute-sijoituksella.
Js-koodi on seuraava:

$('#cleft').ready(function(){
  $("#cleft").click(function(){
    $("#clist-left").slideToggle("slow");
  });
});
<a href="<!-- suora linkki tässä-->#clist-left"><?php echo $text_sidebar;?></a>

Muuten toimii hyvin, mutta sivu pomppaa ylös aivan kuin käyttäisin tuossa clist-left elementin alussa a name elementtiä. Ilman tuota suoraa linkkiosoitetta siirtyy etusivulle. Ehkä tämän tyyppisen on olemassa oma funktio?

Metabolix [05.03.2013 16:09:06]

#

Jos haluat, ettei linkki vie minnekään, laita osoitteeksi pelkkä # tai estä tavallinen toiminta JS-koodilla.

Mitään a name -elementtiä ei ole, ja tarkoittamasi name-attribuutin käyttö a-elementissä on muutenkin jo iät ja ajat sitten korvautunut id-attribuutilla missä tahansa elementissä. Siis nykyään ei pidä laittaa mitään ylimääräisiä <a name="x"> -tageja vaan yksinkertaisesti vaikka <h2 id="x">. Kyseessä ei ole mikään uusi suositus, vaan name-attribuutin käyttö on deprekoitu jo XHTML 1.0:ssa 2000-luvun alussa.

pistemies [05.03.2013 16:47:31]

#

Metabolix kirjoitti:

Jos haluat, ettei linkki vie minnekään, laita osoitteeksi pelkkä # tai estä tavallinen toiminta JS-koodilla.

Kiitos! Tuo pelkkä # käänsi sen parin sekunnin viiveellä etusivulle. Mutta tuo jälkimmäinen toimi oikein hyvin.

Metabolix [05.03.2013 17:26:42]

#

Sanoinkin väärin, #-linkki voi viedä sivun alkuun. Sen sijaan href-attribuutin voi poistaa kokonaan, mutta silloin yleensä myös elementin oletustyyli vaihtuu.

Toiselle sivulle #-linkin ei pitäisi koskaan viedä, joten jos niin käy, koodissasi on jotain ylimääräistä, josta et ole kertonut.

The Alchemist [07.03.2013 09:30:32]

#

Palauta a-elementin click-tapahtuman käsittelevässä koodissa lopuksi false, niin linkin osoittamaan kohteeseen ei siirrytä lainkaan. Minulla oli tapana jättää href-attribuutti pois kokonaan "linkeistä", joiden ei ole tarkoituskaan ohjata minnekään, mutta sitten luin sellaista, ettei iOS:n selain triggeröisi sellaisten a-elementtien click-tapahtumaa ollenkaan. Googelluksen perusteella vaikuttaa tosiaan olevan näin.

$('a').click(function(e) {
  // Suorita koodia...

  // Ilmeisesti iOS:n selain vaatii myös preventDefault():n kutsumisen
  e.preventDefault();
  return false;
}

Metabolix [07.03.2013 10:48:31]

#

jQueryn tapahtumankäsittelijässä return false johtaa kutsuihin event.stopPropagation() ja event.preventDefault(). Pitäisi siis olla täysin turha käyttää näitä sekaisin. Jos käyttää jo preventDefault-kutsua, ei tarvitse käyttää return false -riviä (eikä kannatakaan, jos ei halua sivuvaikutuksena stopPropatagion-kutsua).

iOS:n (tai Safarin mobiiliversion) erikoisesta toiminnasta on bugiraportti, jossa kerrotaan, että CSS-tyyli "cursor: pointer" korjaa ongelman. Ilmeisesti kosketuslaitteella ei voi klikata mielivaltaisia elementtejä vaan vain niitä, jotka jollain logiikalla vaikuttavat erityisen klikattavilta; muuten pitäisi käyttää kosketustapahtumia.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta