Avatar billede encory Nybegynder
13. januar 2004 - 09:42 Der er 18 kommentarer og
1 løsning

Indsæt script lige før body slut tag dynamisk via js funktion

Hej eksperter..

Jeg sidder og har brug for at funktion der SKAL placeres i et html dokuments <HEAD> sektion. Funktionen skal kunne sætte følgende tekst ind i htmldokumentet som det sidste element før </body> tagget uanset hvad body sektionen måtte indeholde. Det er vigtigt den indsatte tekst altid er det sidste element da det er et styrescript, der accesser dokumentets elementer.

Tekst der skal indsættes:  '<script src="run.js"></script>'

Kan dette lade sig gøre og hvordan ville funktionen se ud?
Avatar billede erikjacobsen Ekspert
13. januar 2004 - 09:56 #1
Du kan ikke gøre det i <body onload="....">  ??
Avatar billede encory Nybegynder
13. januar 2004 - 10:39 #2
nope... HTML dokumentet må ikke røres udenfor <HEAD> sektionen... Men man kan vel godt definere en funktion i head og kalde den nedenfor alá
Function foo() {
gør noget....
}
foo();
Avatar billede erikjacobsen Ekspert
13. januar 2004 - 10:45 #3
Så gør du bare dette i <head>

function foo() {
gør noget....
}
onload=foo;
Avatar billede encory Nybegynder
13. januar 2004 - 10:47 #4
Jeps... men nu var det jo selve indsætningsfunktionen jeg var på jagt efter... at skulle have været en men ellers synes jeg opgavebeskrivelsen efterlyser sådan en... :o)
Avatar billede erikjacobsen Ekspert
13. januar 2004 - 10:53 #5
Jeg kan godt læse. Men hvad forskel gør det om noget bliver indsat i bunden, som
reelt blot kalder en js-funktion, eller om funktionen blot bliver udført når siden
er færdig. Der kan være en forskel, naturligvis, men det jeg anfører kan jo lade
sig gøre.
Avatar billede encory Nybegynder
13. januar 2004 - 11:14 #6
Ja! Men hvis styringsfilen run.js skal behandle elementer som input felter og forme billeder mv. er det nødvendigt at disse elementer er defineret før selve scriptet der behandler dem i dokumentet. Ergo skal det script som anført i opgavebeskrivelse sættes ind helt nede i bunden. og det er bare en funktion der kan sætte tekst ind før </body>tagget jeg leder efter...
Avatar billede erikjacobsen Ekspert
13. januar 2004 - 11:27 #7
"behandle"? - onload=foo; bliver først udført til sidst. Det kan referere alle
felter etc. Det er spørgsmålet hvad du mener med "behandle", der afgør om det
kan lade sig gøre eller ej.
Avatar billede jakobdo Ekspert
13. januar 2004 - 15:40 #8
Menes der ikke bare at du skal gøre følgende:

<script src="run.js"></script>
</body>
Avatar billede encory Nybegynder
13. januar 2004 - 22:44 #9
Jo præcis... det er slut resultatet... Funktionen jeg efterlyser skal ende op med det resultat når funktionen er kaldt fra headeren....
Avatar billede encory Nybegynder
14. januar 2004 - 08:57 #10
Det er åbenbart ikke muligt at lave en sådan funktion så jeg lukker spørgsmålet.. Undskyld ulejligheden...
Avatar billede erikjacobsen Ekspert
14. januar 2004 - 09:00 #11
Jeg tror det er muligt ;)  Hvis du kan give et eksempel på hvad den skal gøre,
vil jeg gerne lave et forslag med udgangspunkt i mit forslag.
Avatar billede jakobdo Ekspert
14. januar 2004 - 09:06 #12
Jeg forstår ikke 100% hvad der skal laves?
Avatar billede encory Nybegynder
14. januar 2004 - 12:54 #13
<html>
<head>
<title> en vilkårlig titel</title>
<script type="text/javascript">
function insertScript() {
//DEN KODE JEG EFTERLYSER DER KAN SÆTTE (<SCRIPT SRC="RUN.JS"></SCRIPT>) IND I BUNDEN
//SOM DET SIDSTE FØR </BODY>
}
insertScript();
</script>
<head>
<!--intet må røres herfra der må kun indsættes kode i header-->
<body>
<input type="text" id="text1" value="" />
<input type="text" id="text1" value="" />
<input type="text" id="text1" value="" />

<input type="button" id="button1" value="" />
<input type="button" id="button2" value="" />
<img src="blabla.jpg" id="img1" alt="blabla" />

<!--Her bør der stå efter indsættelse fra initfunktionen...
<script src="run.js"></script>
(for ellers kan funktionerne i run.js ikke finde fx. inputfelter i DOM, osv. der sker bjælde med mindre man indsætter scriptet i bunden.. hvilket kun har lykkedes mig at gøre manuelt. står scriptet i toppen sker der intet.)
-->
</body>
<html>

Jeg er blevet lidt i tvivl om om det overhovedet kan lade sig gøre som jeg har tænkt mig.. men jeg kan ikke se nogen anden udvej.... run.js tilføjer styles og eventhandlers(onclick, onfocus osv.) til inputfelterne samt diverse andre elementer i dokumentet og det har jeg styr på....Det er bare med at få initialiseret dokumentet med de funktioner.
Ja der er ingen <form></form> omkring inputfelterne, det er ingen fejl i dette tilfælde!
Avatar billede erikjacobsen Ekspert
14. januar 2004 - 12:58 #14
Jo, det er en fejl, når der ikke er <form>...</form> rundt om.
Kan du eet eksempel på hvad din funktion skal ændre på et (eller flere) input felter?
Avatar billede encory Nybegynder
14. januar 2004 - 13:43 #15
Stol nu bare på mig når jeg siger at det ikke er en fejl... JEg var også lang tid om at blive overbevist... :o)
og kan det ikke lade sig gøre uden så er det bare det... så må jeg finde på noget andet....

/********************************************************************************
*  FORM ORIENTED FUNCTIONS                                                    *
********************************************************************************/
function setElementStyle(element, style) {
    var element = event.srcElement, es = element.style, s = style;//, estyle = element.elementHighlighted;
          es.backgroundColor = s.backgroundColor;
          es.border = s.border;
          es.color = s.color;
          es.margin = s.margin;
          es.padding = s.padding;
}
function elementFocus() {
    var element = event.srcElement;
          setElementStyle(element, element.styleHighlighted);
}
function elementBlur() {
    var element = event.srcElement;
          setElementStyle(element, element.styleNormal);
}
function findRule(ruleName) {
    var s = document.styleSheets(0), r = s.rules, l = r.length;
          for (var i=0; i<l; i++){
            if (r(i).selectorText == ("."+ruleName))
                  return r(i);
          }
          return null;
}
function makeAccessibleForm(clsHighlighted, clsNormal) {
    var styleHighlighted = findRule(clsHighlighted).style;
      var styleNormal = findRule(clsNormal).style;
    var objInput = document.getElementsByTagName('INPUT');
    for (var i = 0; i < objInput.length; i++) {
        if (objInput[i].type == 'text' || objInput[i].type == 'password') {
            objInput[i].styleHighlighted = styleHighlighted;
            objInput[i].styleNormal = styleNormal;
            objInput[i].attachEvent("onfocus", elementFocus);
            objInput[i].attachEvent("onblur", elementBlur);
        }
    }
}
function initializeForms() {
    makeAccessibleForm ("highlighted", "normal");
}
Avatar billede erikjacobsen Ekspert
14. januar 2004 - 13:57 #16
Så hvad sker der hos dig ved at indsætte
window.onload=initializeForms;
lige under det JavaScript du har vist os?
Avatar billede encory Nybegynder
14. januar 2004 - 15:30 #17
Det virker...
Hold da kæft... var det virkeligt så simpelt.. jeg skammer mig lige så stille...
Men du skal da have de 200 point, som tak for hjælp og tålmodighed.. Jeg har oprettet et spm. som du kan svare på .. så er der point.

http://www.eksperten.dk/spm/451492
Avatar billede erikjacobsen Ekspert
14. januar 2004 - 15:33 #18
Det vil virke så længe du kun manipulere DOM-elementer, men ikke (så vidt jeg da
ved) hvis bare vil indsætte mere på siden, for den er færdig på det tidspunkt.

Det er en fornøjelse at hjælpe, og jeg samler ikke på point.
Avatar billede encory Nybegynder
14. januar 2004 - 15:43 #19
Tag dem nu bare alligevel....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester