jQuery show/hide-box, 2 stk på én side...??

Tags:    javascript

Hmm...
Nu har jeg endelig fundet ud af, hvordan jeg kan have to af disse show/hide-boxe på min side, men pludselig opdager jeg, at det kan være tilfældigt, hvilken box, der "åbnes", når man klikker på "show"-knappen...

Og det er jo logisk nok, eftersom funktionen siger, at den skal åbne .slickbox, når der klikkes på .slick-show ...

What to do???

Hvordan kan jeg få min .slick-show og .slick-hide til at pege på den præcise .slickbox?

Skal jeg dubblere script-koden og simpelthen kalde dem for:

.slick-show2
.slick-hide2
.slickbox2

???

Kan det gøres på andre måder??



10 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Det kan måske godt gå hen og blive et problem...

Jeg brugte oprindeligt toggle, men det indhold jeg togglede var så langt at der skulle scrolles ret langt, når man var færdig med at læse indholdet for at komme tilbage til toppen og "toggle-lukke" den igen...

Derfor anbragte jeg en show-knap før indholdet og en hide-knap efter....

Så måske kan jeg ikke brugedin idé, fordi når man så klikker på hide-knappen, så vil den måske ikke forstå at det er den div-box, der kommer lige inden hide-knappen i html-teksten, der skal lukkes...

Forstår du hvad jeg mener?

Jeg kan godt se hvad du mener. Der er et par ting der skal tages i betragtning når man lægger sig fast på en fremgangsmåde. next() er bedst iogmed at du bare kan smide flere elementer på din liste on-the-fly, uden at skulle fedte med at give dem alle en passende id og rel. Det er en ulempe hvis dine elementer ikke altid ligger ved siden af hinanden, men kun dér.

Hvis du føler dig usikker på alt dette, og bare gerne vil have det til at virke i en ruf, så kan du bare bruge id/rel metoden og komme videre i dit liv. :) Men hvis du har lyst til at lege videre med JQuery udover hvad der lige nu og her får opgaven løst kan du prøve følgende:

Fold kodeboks ind/udKode 


I dette eksempel kan vi med JQuery sige at hver gang der bliver klikket på .slick-show, så skal det næste element, som så er en div med .slickbox, blive vist. Næste gang du klikker på den samme .slick-show vil den samme div så blive skjult igen.

Fold kodeboks ind/udKode 


Prøv at teste det af og lege lidt med det.

Hvis du på et tidspunkt laver det sådan så div-boksene ligger før din .slick-show istedet for efter, kan du skifte .next() ud med .prev() og opnå samme resultat. Dette kan vi så overføre til din show og din hide knap, og så bruge det istedet for toggle. Så vil markup'en være som vi ser her:

Fold kodeboks ind/udKode 


og i Javascript:
Fold kodeboks ind/udKode 


Dette burde få det resultat du gerne vil have - men vi kan stadig se de to knapper på alle tidspunkter, og det er muligvis ikke hensigtsmæssigt. Hvis vi fx gerne vil skjule slick-show mens vi har boksen åben, og slick-hide mens boksen er lukket, kan vi prev() og next()'e flere gange:

Fold kodeboks ind/udKode 


Hvis det giver mening? :)



Indlæg senest redigeret d. 28.10.2010 14:31 af Bruger #8223
Det vil ikke åbne en tilfældig slickbox, det vil åbne alle slickboxes.

Du kan give den individuelle slickbox et unikt id. Så alle slickboxes der kan vises og gemmes har klassen slickbox, og så har den enkelte slickbox et id du kan pege på.

Du kan fx sige:
Fold kodeboks ind/udKode 

i din markup (bemærk "rel" og "id" sammenhængen)

og så i din js:
Fold kodeboks ind/udKode 


Dette er dog ikke lige den kønneste måde at gøre det på. Hvis du har slickboxe og slickknapper lige efter hinanden i DOM'en, fx:
Fold kodeboks ind/udKode 

så kan du bare bede den vise hvadend element der kommer efter, ved at sige:
Fold kodeboks ind/udKode 

Dette er en meget pænere løsning, men det kræver at det giver mening for dit layout at de ligger i rapid succession.



Hej per - tusind tak for din udførlige hjælp!!! :)

Nu ved jeg ikke lige hvad "rapid succession" betyder, men hvis det betyder, at min ebokse altid kommer i rækkefølge, så jeg har slickboxen lige efter slick-knappen, så er svaret ja...

Men nu skriver du også toggle i din sidste kodestump - og jeg bruger faktisk ikke toggle-funktionen, så tror du ikke jeg skal prøve dit første eksempel?

Jeg synes det lyder smart med den rel der - og det betyder jo faktisk at jeg ikke behøver have hele scriptet stående to gange med to - eller evt. tre forskellige id'er... Dét synes jeg lyder smart!



Hej per - tusind tak for din udførlige hjælp!!! :)

Nu ved jeg ikke lige hvad "rapid succession" betyder, men hvis det betyder, at min ebokse altid kommer i rækkefølge, så jeg har slickboxen lige efter slick-knappen, så er svaret ja...

Men nu skriver du også toggle i din sidste kodestump - og jeg bruger faktisk ikke toggle-funktionen, så tror du ikke jeg skal prøve dit første eksempel?

Jeg synes det lyder smart med den rel der - og det betyder jo faktisk at jeg ikke behøver have hele scriptet stående to gange med to - eller evt. tre forskellige id'er... Dét synes jeg lyder smart!

Jeg bruger toggle begge steder, men du kan bare skifte det ud med .show() eller hvad du nu bruger. Toggle gør bare så hvis boksen er skjult idet du trykker, så bliver den vist, og hvis den er vist, bliver den skjult. Så den toggler imellem de to states. Hvis du vil have mere fintfølende kontrol med hvad der sker når den viser/skjuler, eller den kun skal kunne vises og ikke skjules igen, så kan du bare bruge show() og hide() :)

Men det er korrekt at jeg med rapid succession mener lige efter hinanden. Hvis det er tilfældet kan du bare bruge .next().toggle() eller .next().show() eller hvad du nu vil.

$('#id').next() returnerer det JQuery objekt der ligger umiddelbart efter $('#id') i HTML'en. Det vil altså sige at $('#id').next().hide(); vil skjule det element der ligger efter elementet med #id i HTML.




Indlæg senest redigeret d. 28.10.2010 13:47 af Bruger #8223
Det kan måske godt gå hen og blive et problem...

Jeg brugte oprindeligt toggle, men det indhold jeg togglede var så langt at der skulle scrolles ret langt, når man var færdig med at læse indholdet for at komme tilbage til toppen og "toggle-lukke" den igen...

Derfor anbragte jeg en show-knap før indholdet og en hide-knap efter....

Så måske kan jeg ikke brugedin idé, fordi når man så klikker på hide-knappen, så vil den måske ikke forstå at det er den div-box, der kommer lige inden hide-knappen i html-teksten, der skal lukkes...

Forstår du hvad jeg mener?



Det lyder faktisk til at din kodebox nr. 3 og 4 er hvad jeg skal bruge... :)

Bare lige et lille spørgsmål:

Du skriver:
$(this).next().show();

Hvordan ved den så at min .slickbox = .next?
Har jeg ikke brug for at skrive .slickbox noget sted?

---

Jeg pakker sammen for idag og ser på at få fedtet lidt i koden i morgen...

Jeg takker meget for din hjælp!



Det lyder faktisk til at din kodebox nr. 3 og 4 er hvad jeg skal bruge... :)

Bare lige et lille spørgsmål:

Du skriver:
$(this).next().show();

Hvordan ved den så at min .slickbox = .next?
Har jeg ikke brug for at skrive .slickbox noget sted?

---

Jeg pakker sammen for idag og ser på at få fedtet lidt i koden i morgen...

Jeg takker meget for din hjælp!

Den ved iogforsig heller ikke at din .slickbox er next - men det er for koden ligegyldigt, da den bare ukritisk tager det næste element i rækken, og hvis din markup er som jeg har vist den, så vil din slickbox altid være den næste i rækken. Dermed behøves du ikke bruge .slickbox i din javascript.

Hvis vi forestiller os at HTML-strukturen er sådan her:

HTML
-HEAD
--TITLE
-BODY
--#CONTAINER
---.slick-show
---.slickbox
---.slick-hide
---.slick-show
---.slickbox
---.slick-hide
---.slick-show
---.slickbox
---.slick-hide

Så vil .slickbox altid være next() i forhold til .slick-show, og den vil altid være prev() i forhold til .slick-hide. Eftersom den bruger $(this), altså det element du klikker på, som udgangspunkt, vil den bare begynde at arbejde på det element der ligger henholdsvis ligefør (.prev()) eller lige efter (.next()) uanset hvad type, klasse etc. elementet har.

Men selv tak, jeg håber jeg er behjælpelig og ikke snakker alt for kryptisk :)



Det er slet ikke såå kryptisk igen, som man kunne frygte eller forvente... ;)

Jeg må lige prøve...



Det ser ud til at virke!!!
Nu skal der bare lidt "lir" på effekten. :)

http://www.lineofdesign.dk/portefolio/moder-jord-test.html

Tusind tak! :D



Du er ganske velkommen! :)



t