[JS] Schoonheidsfoutje bij toggle

Pagina: 1
Acties:

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01-2025
Ik heb voor mijn website een zogenaamde "toggle" geschreven, net zoals je dat hier op GoT hebt. Echter heeft die van mij één foutje die ik op GoT niet kan ontdekken. Namelijk wanneer een toggle gesloten is en je herlaad de pagina, dan zie je eerst in een flits de inhoud van die toggle en daarna schiet 'ie weer dicht. Nu zou ik het graag zien dat je die irritante flits niet ziet, en dat ie dus direct wordt geladen als gesloten.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
window.onload = function()
                {
                    if(getCookie('toggle'))
                    {
                        var cookie = getCookie('toggle');
                        var array = cookie.split(';');
                        
                        for(i = 0; i < array.length; i++)
                        {
                            if(array[i] != '')
                            {
                                if(document.getElementById('c' + array[i]))
                                {
                                    document.getElementById('c' + array[i]).style.display = 'none';
                                    document.getElementById('m' + array[i]).style.display = 'none';
                                    document.getElementById('p' + array[i]).className = 'visible';
                                }
                            }
                        }
                    }
                };

Ik vraag me dus af of er hier ergens een truckje voor is, of dat ik dit gewoon fout heb gedaan?

Alvast bedankt.

[ Voor 18% gewijzigd door MarkvE op 21-05-2004 09:18 ]

Vormkracht10


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
waarom draai je het systeem niet gewoon om?? dus eerst alles op display:none; en dan op display:block; wanneer het open moet zijn...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01-2025
Dan krijg je precies hetzelfde effect, alleen dan andersom :) Dan zie je ze dus open schieten ipv dicht...

Vormkracht10


Verwijderd

Waarschijnlijk komt dit doordat je eerst alle items zichtbaar hebt en dan vervolgens na het laden de items verbergt die niet zichbaar moeten zijn. Al bij het schrijven van de html naar het document moet je kijken of het item visible moet zijn of niet.

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01-2025
Daar was ik al bang voor... dan moet ik het dus serverside integreren. Ik denk dat het zo ook wordt gedaan op GoT, maar hoe zetten zij dan een cookie die PHP ook kan inlezen? Ik dacht dat dat wel kon door een PHP pagina (waar de setCookie() in staat) te laden via de IMG tag. Maar ideaal is het niet...

Vormkracht10


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

MarkvE schreef op 21 mei 2004 @ 09:38:
Daar was ik al bang voor... dan moet ik het dus serverside integreren. Ik denk dat het zo ook wordt gedaan op GoT, maar hoe zetten zij dan een cookie die PHP ook kan inlezen? Ik dacht dat dat wel kon door een PHP pagina (waar de setCookie() in staat) te laden via de IMG tag. Maar ideaal is het niet...
Hoezo server-side :?

Lees tijdens het laden die cookie en schrijf 'dynamisch' met document.write de juiste stukjes code :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Hoeft niet serverside, kan ook client side...

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01-2025
Aha, in die zin. Maar hoe zien jullie dat dan? Om elke toggle een IF constructie?

Vormkracht10


Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<body>
<script type="text/javascript">
function()
                {
                    if(getCookie('toggle'))
                    {
                        var cookie = getCookie('toggle');
                        var array = cookie.split(';');
                        
                        for(i = 0; i < array.length; i++)
                        {
                            if(array[i] != '')
                            {
                                if(document.getElementById('c' + array[i]))
                                {
                                    // schrijf hier de HTML naar het document met document.write(); ...            
                                }
                            }
                        }
                    }
                };
</script>

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

De cookies die met javascript geset worden, worden als het goed is gewoon naar de server gestuurd bij de volgende request. Dat betekent dat je de waarden dus gewoon in PHP uit kunt lezen mbv. de $_COOKIE array.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01-2025
Verwijderd schreef op 21 mei 2004 @ 09:53:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<body>
<script type="text/javascript">
function()
                {
                    if(getCookie('toggle'))
                    {
                        var cookie = getCookie('toggle');
                        var array = cookie.split(';');
                        
                        for(i = 0; i < array.length; i++)
                        {
                            if(array[i] != '')
                            {
                                if(document.getElementById('c' + array[i]))
                                {
                                    // schrijf hier de HTML naar het document met document.write(); ...            
                                }
                            }
                        }
                    }
                };
</script>
Ik kan wel redelijk javascript schrijven, maar sommige functies heb ik vrijwel nooit gebruikt. Als ik nu iets in document.write(); zet en dat schrijf, dan lijkt het erop of het aan het begin van het document komt te staan, maar hoe schrijf ik nu bijv. style="display: none;" op de plaats waar het hoort? Of ik moet je bedoeling compleet misvatten...
drm schreef op 21 mei 2004 @ 09:55:
De cookies die met javascript geset worden, worden als het goed is gewoon naar de server gestuurd bij de volgende request. Dat betekent dat je de waarden dus gewoon in PHP uit kunt lezen mbv. de $_COOKIE array.
Na wat gekloot met het path en domain van de cookie, werkt dat idd. Ik houd dat als laatste optie, aangezien ik dit het liefst clientside op los.

Vormkracht10


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

MarkvE:
Ik kan wel redelijk javascript schrijven, maar sommige functies heb ik vrijwel nooit gebruikt. Als ik nu iets in document.write(); zet en dat schrijf, dan lijkt het erop of het aan het begin van het document komt te staan, maar hoe schrijf ik nu bijv. style="display: none;" op de plaats waar het hoort? Of ik moet je bedoeling compleet misvatten...
Hoewel ik zelf helemaal geen voorstander ben van document.write, hier een voorbeeldje:

code:
1
2
3
4
5
<body>
   <script>document.write ( '<div style="border:1px solid #f00">' );</script>
      woei!
   <script>document.write ( '</div>' );</script>
</body>

Voer dat eens uit, dat maakt de bedoeling al een beetje duidelijker denk ik :)

edit:
Overigens heeft dit geen enkel voordeel boven 't serversided regelen, en in het andere geval moet je je complete content in een document.write () gaan zetten, en da's helemaal een drama.

Take my advice: doe 't gewoon serverside :)

[ Voor 16% gewijzigd door drm op 21-05-2004 10:29 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

drm schreef op 21 mei 2004 @ 10:16:
[...]

edit:
Overigens heeft dit geen enkel voordeel boven 't serversided regelen, en in het andere geval moet je je complete content in een document.write () gaan zetten, en da's helemaal een drama.

Take my advice: doe 't gewoon serverside :)
Waarom verdient het de voorkeur dit server-side te regelen boven client-side? Ik zie niet in waarom document.write() een drama is...

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01-2025
drm schreef op 21 mei 2004 @ 10:16:
[...]
edit:
Overigens heeft dit geen enkel voordeel boven 't serversided regelen, en in het andere geval moet je je complete content in een document.write () gaan zetten, en da's helemaal een drama.

Take my advice: doe 't gewoon serverside :)
Ik heb je advies dan ook maar opgenomen, het werkt nu prima :)

Vormkracht10


  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01-2025
Verwijderd schreef op 21 mei 2004 @ 10:36:
[...]


Waarom verdient het de voorkeur dit server-side te regelen boven client-side? Ik zie niet in waarom document.write() een drama is...
document.write() zou handig zijn wanneer je precies op díe plaats iets neer kon zetten (zoals jij leek aan te geven...) maar kennelijk kan dat dus niet, waardoor je het dus vrijwel niet meer dynamisch is.

Vormkracht10


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Jorgen:
Waarom verdient het de voorkeur dit server-side te regelen boven client-side? Ik zie niet in waarom document.write() een drama is...
Omdat je twee keuzes hebt:

[list=1]• Je html code clutteren met document.write, op de volgende wijze:
HTML:
1
2
3
<script type="text/javascript">document.write ( '<sometag>' );</script>
hier de zooi die je normaal gesproken inde 'sometag' zou zetten.
<script type="text/javascript">document.write ( '</sometag>' );

Ik zie dan geen enkel voordeel meer boven bijvoorbeeld:
PHP:
1
2
3
<?php echo '<sometag>'; ?>
hier de zooi die je normaal gesproken inde 'sometag' zou zetten.
<?php echo '</sometag>'; ?>

• Je kunt ook de gehele html vervangen door javascript, maar dat is dus een drama:
HTML:
1
<script type="text/javascript">document.write ( '<sometag>hier de zooi die hier thuishoort</sometag>' );</script>


Het probleem is dat de contents van 'sometag' ook allerlei dynamische (serverside) zooi kan zijn, en je bij (1) geen reden meer hebt om het niet serversided te doen, en je het bij (2) jezelf erg lastig maakt om de inhoud van de document.write nog dynamisch te laten zijn.

Wat zouden voordelen van document.write boven serversided zijn, volgens jou? :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Dat je geen server-side taal nodig hebt natuurlijk. :+

Klinkt misschien stom, maar dat is een perfecte reden. Neem als voorbeeld mijn editor (nee ik ga geen link geven, ik wil niet nog een note krijgen over spammen :Y) ). NextAvenue moet overal werken en dus niet afhankelijk zijn van een server-side taal, daarmee houd je flexibiliteit en is het portable (tussen verschillende server-side talen).
Dat is toch een groot voordeel op zich?

Zolang een server-side taal niet strikt noodzakelijk is, zou ik het vermijden. (dan kijk ik even met de het-moet-op-zoveel-mogelijk-systemen-werken bril op)

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01-2025
Verwijderd schreef op 21 mei 2004 @ 18:39:
Dat je geen server-side taal nodig hebt natuurlijk. :+

Klinkt misschien stom, maar dat is een perfecte reden. Neem als voorbeeld mijn editor (nee ik ga geen link geven, ik wil niet nog een note krijgen over spammen :Y) ). NextAvenue moet overal werken en dus niet afhankelijk zijn van een server-side taal, daarmee houd je flexibiliteit en is het portable (tussen verschillende server-side talen).
Dat is toch een groot voordeel op zich?

Zolang een server-side taal niet strikt noodzakelijk is, zou ik het vermijden. (dan kijk ik even met de het-moet-op-zoveel-mogelijk-systemen-werken bril op)
T'is maar net hoe je het bekijkt... het is makkelijker om PHP (= gratis) op een server te installeren dan bezoekers te dwingen Javascript in hun browser aan te zetten.

Maar dat hangt natuurlijk ook af van je doelgroep. Is die doelgroep de huis-tuin-en-keuken website van de buurman die met copy&paste die website heeft gemaakt op een gratis servertje zonder PHP ondersteuning, of is dat een doelgroep van hoger niveau. En het ligt er natuurlijk ook aan watvoor script je aanbied...

In mijn geval was het een website. Dus het moet inprincipe bij iedere bezoeker werken.

Vormkracht10


Verwijderd

Ik ben nog steeds van mening dat je alleen een server-side taal moet gebruiken als dat echt strikt noodzakelijk is...

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

de truuk die we hier op GoT toepassen is door het script inline uit te voeren ipv onload ;)

Intentionally left blank

Pagina: 1