Javascript ná PHP include

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Torrentus
  • Registratie: April 2009
  • Laatst online: 16:57
Ik wil graag een stuk code includen vanuit een centraal config bestand, bijvoorbeeld;

HTML:
1
<li id="home" value="0"><a href="index.php">Home</a></li>


om vervolgens, nadat die code ge-include is, met javascript de waarde van 'value' te veranderen in 1. Dat heb ik nu gedaan door voor de </body> tag te gebruiken;

JavaScript:
1
2
<script type="type/javascript" language="javascript">function atload() {document.getElementById("home").value = "1";}
window.onload=atload;</script>


Maar dit lijkt helaas niet te werken.. :( Zien jullie wat ik fout doe? :)

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Waarom doe je niet value gelijk op 1 dan? :? Daarnaast kan een list item geen waarde hebben. Voor een unordered list maakt het niet uit, het is niet voor niets unordered. Voor een ordered list wordt de nummering bepaald door de plek in de lijst, tussen de ol-tags. :)

[ Voor 49% gewijzigd door CH4OS op 31-08-2012 23:20 ]


Acties:
  • 0 Henk 'm!

  • Torrentus
  • Registratie: April 2009
  • Laatst online: 16:57
CptChaos schreef op vrijdag 31 augustus 2012 @ 23:20:
Waarom doe je niet value gelijk op 1 dan? :? Daarnaast kan een list item geen waarde hebben.
Omdat de toepassing een menu is, met een list met meerdere records.
Een ander script leest aan de hand van de value uit welk menuitem als 'active' gemarkeerd moet worden... ;)

Acties:
  • 0 Henk 'm!

  • Foxpat
  • Registratie: April 2011
  • Laatst online: 01-06 01:59
De PHP include is serversided, het javascript is client sided. Het javascript is dus sowieso altijd na de PHP include. Verder weet ik niet wat er mis is met je javascript, maar het zit in ieder geval al op de goede volgorde.

Acties:
  • 0 Henk 'm!

Anoniem: 98590


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-06 18:50

NMe

Quia Ego Sic Dico.

Sowieso geen value gebruiken op een li als je enige doel is om aan te geven of iets actief is of niet. Daar zijn id's en classes voor bedacht. Verder begrijp ik het nut niet. Je menu genereer je aan de PHP-kant en die bepaalt wel wat active is of niet. Als er überhaupt al een javascript nodig is voor je menu-animatie, dan hoef je niet meer te doen dan die active class weghalen van alle elementen in je menu en dan toevoegen aan het gewenste element, maar dat is zoals JKP-Kipmans al zegt geen rocket science. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Torrentus
  • Registratie: April 2009
  • Laatst online: 16:57
Bedankt voor jullie reacties. Ik heb JKP-Kipmans suggestie geprobeerd, maar ook

JavaScript:
1
2
3
<script type="type/javascript" language="javascript">function atload() {document.getElementById("home"); 
d.setAttribute("value", "1");}
window.onload=atload;</script>

Doet het helaas niet..

Mijn idee is om de hele 'menu' code centraal op te slaan, zodat ik niet voor elk toegevoegd knopje alle pagina's langs hoef te lopen. Voor de animatie, script van Internet, is 'value=1' nodig voor de actieve pagina. Ik kan het best veranderen in 'class=active', maar dat verandert de vraag en het antwoord m.i. niet, toch?

Acties:
  • 0 Henk 'm!

  • Chesta
  • Registratie: November 2004
  • Laatst online: 20-02-2023
Torrentus schreef op vrijdag 31 augustus 2012 @ 23:56:
Bedankt voor jullie reacties. Ik heb JKP-Kipmans suggestie geprobeerd, maar ook

JavaScript:
1
2
3
<script type="type/javascript" language="javascript">function atload() {document.getElementById("home"); 
d.setAttribute("value", "1");}
window.onload=atload;</script>

Doet het helaas niet..

Mijn idee is om de hele 'menu' code centraal op te slaan, zodat ik niet voor elk toegevoegd knopje alle pagina's langs hoef te lopen. Voor de animatie, script van Internet, is 'value=1' nodig voor de actieve pagina. Ik kan het best veranderen in 'class=active', maar dat verandert de vraag en het antwoord m.i. niet, toch?
JavaScript:
1
2
3
4
5
6
7
<script type="text/javascript" >
function atload() {
    var d = document.getElementById("home"); 
    d.setAttribute("value", "1");
}
window.onload = atload();
</script>


'var d = ' vergeten voor document.getElementById("home"); :)

[ Voor 4% gewijzigd door Chesta op 01-09-2012 00:02 ]

End of Transmission


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-06 18:50

NMe

Quia Ego Sic Dico.

Die haakjes horen er niet achter op regel 6, toch Chesta?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 30-05 23:07
De javascript wordt 'te vroeg' uitgevoerd. onload != ondomready

Om niet direct aan bijv. jQuery vast te zitten, kan je kijken naar http://code.google.com/p/domready/

onload: http://jsfiddle.net/nNhwr/
ondomready: http://jsfiddle.net/nNhwr/1/

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-06 18:50

NMe

Quia Ego Sic Dico.

C0rnelis schreef op zaterdag 01 september 2012 @ 00:04:
De javascript wordt 'te vroeg' uitgevoerd. onload != ondomready
Dat maakt in principe in dit geval niet uit als je javascript maar onderaan staat.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 30-05 23:07
NMe schreef op zaterdag 01 september 2012 @ 00:05:
[...]

Dat maakt in principe in dit geval niet uit als je javascript maar onderaan staat.
JSFiddle die zet de javascript inderdaad in de head, maar dit maakt niets uit i.c.m. window.onload

http://jsfiddle.net/nNhwr/2/

Dus: bovenaan zetten i.c.m ondomready of onderaan zonder event (en eventueel zelfs zonder functie).

Acties:
  • 0 Henk 'm!

  • Torrentus
  • Registratie: April 2009
  • Laatst online: 16:57
@C0rnelis, NMe & Chesta, bedankt!

Combinatie van jullie antwoorden resulteerde in een werkende code, bedankt!

Resultaat;

JavaScript:
1
2
3
 
    var d = document.getElementById("home");  
    d.setAttribute("value", "1"); 


Dus zonder functie/event (C0rnelis) en mét 'var d =' (Chesta)

Bedankt allen :)

[ Voor 3% gewijzigd door Torrentus op 01-09-2012 00:17 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
C0rnelis schreef op zaterdag 01 september 2012 @ 00:13:
JSFiddle die zet de javascript inderdaad in de head, maar dit maakt niets uit i.c.m.
offtopic:
a) daar is de bovenste dropdown voor: en b) je kunt 't natuurlijk ook gewoon in het <html> frame plakken ;)

HTML:
1
2
3
4
5
6
7
8
9
<html>
    <head>
        <title>Foo</title>
    </head>
    <body>
        <p>Bar</p>
        <script type="text/javascript">....</script>
    </body>
</html>


@Torrentus: een li heeft geen value attribuut en zal dan ook niet valideren; niet dat 't veel boeit maar ik zou een class gebruiken (die je overigens met .className kunt benaderen) of een data-... attribuut als je op je eigen attributen staat. Dat valideert dan net zo min als je < HTML5 gebruikt maar maakt 't in ieder geval wat consistenter en makkelijker om straks evt. wél naar zinnige HTML5 te gaan.

[ Voor 27% gewijzigd door RobIII op 01-09-2012 00:26 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-06 18:50

NMe

Quia Ego Sic Dico.

Leuk dat je eruit bent. Toch zou ik het onload-gedeelte van dit script in elk geval aan de PHP-kant doen en alleen de eventuele wissel/animatie-logica in Javascript. Dit is niet per se een probleem verder, maar het zou wel netter zijn. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Torrentus
  • Registratie: April 2009
  • Laatst online: 16:57
NMe schreef op zaterdag 01 september 2012 @ 00:21:
Leuk dat je eruit bent. Toch zou ik het onload-gedeelte van dit script in elk geval aan de PHP-kant doen en alleen de eventuele wissel/animatie-logica in Javascript. Dit is niet per se een probleem verder, maar het zou wel netter zijn. :)
Ben toch wel geïnteresseerd in hoe je dat dan in je hoofd hebt. Was ook mijn eerste idee namelijk, maar kon niet zo gauw een oplossing vinden. Dan zou je de variabele $menu moeten aanpassen op basis van de plek vanaf waar de include wordt gemaakt. Dacht eerst dat te doen met
PHP:
1
include("config.php?page=home");
, maar het If/else/else/else/else boomwerk wat ik daarmee kreeg inclusief voor elke pagina een nieuwe copy/paste van mijn menu-code leek me ontzettend inefficiënt. :) Laat staan dat ik niet zeker weet of je überhaupt ?page=xx achter een include-locatie mag/kunt plakken ;)

[ Voor 5% gewijzigd door Torrentus op 01-09-2012 00:25 ]


Acties:
  • 0 Henk 'm!

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 30-05 23:07
RobIII schreef op zaterdag 01 september 2012 @ 00:18:
[...]

offtopic:
a) daar is de bovenste dropdown voor: [html] en b) je kunt 't natuurlijk ook gewoon in het <html> frame plakken ;)

HTML:
1
2
3
4
5
6
7
8
9
<html>
    <head>
        <title>Foo</title>
    </head>
    <body>
        <p>Bar</p>
        <script type="text/javascript">....</script>
    </body>
</html>


[..]
toon volledige bericht
Dat is precies wat ik heb laten zien in de direct daarop volgende jsfiddle url ;) - in http://jsfiddle.net/nNhwr/2/ staat in het HTML gedeelte wat http://jsfiddle.net/nNhwr/ aan source genereerde, maar dan de javascript onder de HTML, dus ik snap je punt niet helemaal.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
C0rnelis schreef op zaterdag 01 september 2012 @ 00:25:
Dat is precies wat ik heb laten zien in de direct daarop volgende jsfiddle url ;) - in http://jsfiddle.net/nNhwr/2/ staat in het HTML gedeelte wat http://jsfiddle.net/nNhwr/ aan source genereerde, maar dan de javascript onder de HTML, dus ik snap je punt niet helemaal.
Ik las wat scheef, my bad. Neemt niet weg dat heel dat onload gebeuren niet nodig is als je JS na het element in kwestie staat (liefst ergens nét voor de body).

Ik heb even .innerHTML gebruikt i.p.v. .value (wat overigens .setAttribute('value','1') zou moeten zijn IMHO omdat een li geen .value property heeft van zichzelf Hmmm, in Chrome geeft .value 0 terug i.p.v. de verwachtte undefined) omdat dat 't wat zichtbaarder maakt.

Maar goed, linksom of rechtsom; dit wordt een beetje offtopic en nitpicken. Ik ben misschien wat analer in dit soort flauwe dingen dan jij of een ander :P

[ Voor 14% gewijzigd door RobIII op 01-09-2012 00:38 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 30-05 23:07
Torrentus schreef op zaterdag 01 september 2012 @ 00:24:
[...]


Ben toch wel geïnteresseerd in hoe je dat dan in je hoofd hebt. Was ook mijn eerste idee namelijk, maar kon niet zo gauw een oplossing vinden. Dan zou je de variabele $menu moeten aanpassen op basis van de plek vanaf waar de include wordt gemaakt. Dacht eerst dat te doen met
PHP:
1
include("config.php?page=home");
, maar het If/else/else/else/else boomwerk wat ik daarmee kreeg inclusief voor elke pagina een nieuwe copy/paste van mijn menu-code leek me ontzettend inefficiënt. :) Laat staan dat ik niet zeker weet of je überhaupt ?page=xx achter een include-locatie mag/kunt plakken ;)
Een voorbeeld (niet getest):
Je moet dan voor elke menu item (liefst in een loop?) inderdaad 1 check doen in de trend van:
PHP:
1
<li id="<?php print $item->id; ?>" <?php print ( (isset($_GET['page']) && $_GET['page'] == $item->name ) ? print 'value="1"' : ''); ?>><a href="<?php print $item->location: ?>"><?php print $item->title; ?></a></li>
RobIII schreef op zaterdag 01 september 2012 @ 00:30:
[...]

Ik las wat scheef, my bad. Neemt niet weg dat heel dat onload gebeuren niet nodig is als je JS na het element in kwestie staat (liefst ergens nét voor de body).
De TS maakte dus deze fout
Torrentus schreef op vrijdag 31 augustus 2012 @ 23:15:
Ik wil graag een stuk code includen vanuit een centraal config bestand, bijvoorbeeld;

om vervolgens, nadat die code ge-include is, met javascript de waarde van 'value' te veranderen in 1. Dat heb ik nu gedaan door voor de </body> tag te gebruiken;

JavaScript:
1
[..] window.onload=atload;


Maar dit lijkt helaas niet te werken.. :( Zien jullie wat ik fout doe? :)
en daardoor komen we dus inderdaad tot de conclusie dat deze constructie uberhaupt niet werkt C0rnelis in "Javascript ná PHP include" :)
RobIII schreef op zaterdag 01 september 2012 @ 00:30:
[...]

Ik heb even .innerHTML gebruikt i.p.v. .value (wat overigens .setAttribute('value','1') zou moeten zijn IMHO omdat een li geen .value property heeft van zichzelf Hmmm, in Chrome geeft .value 0 terug i.p.v. de verwachtte undefined) omdat dat 't wat zichtbaarder maakt.
Inderdaad vreemd, blijkbaar convert hij het naar integers :? (Oude versie van Firefox doet hetzelfde als Chrome)

[ Voor 12% gewijzigd door C0rnelis op 01-09-2012 00:47 ]

Pagina: 1