13. januar 2004 - 09:42Der 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?
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();
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)
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.
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...
"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.
<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="" />
<!--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!
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"); }
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.
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.
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.