Avatar billede IreneB Nybegynder
13. marts 2009 - 23:49 Der er 9 kommentarer og
1 løsning

Blank input-felt i IE7 og opera når javascript i html-fil inkluderes i php-fil

Som overskriften siger, har jeg problemer med at få et javascript i en html-fil til at fungere i IE og Opera, når html-filen inkluderes i en php-fil.  Står html-filen med scriptet alene fungerer det fint, men når det inkluderes i php-filen går et eller andet galt med teksten i input-feltet. De fremstår blanke frem for med tekst og "-----", som ønsket.

Firefox, Chrome og Safari håndterer scriptet som ønsket, også når det inkluderes i php.

Et eksempel på problemet kan ses her:

• Html-filen som fungerer fint: http://www.paapinden.dk/tipsogtricks/beregn-opslag/opslag-script.html
• Php-filen, hvor html-filen er inkluderet og dermed ikke virker: http://www.paapinden.dk/tipsogtricks/beregn-opslag.php


Scriptet ser ud som følger:

<body onLoad="initialize();" bgcolor="#ffffff">


<script type="text/javascript">
<!--
function initialize() {                                                          //>Initialize
//indsætter tekst i skrivefeltet og markerer det
document.getElementById("valuemaskefasthed").value = "indtast maskefasthed her"; // Write 'popup' into value-field
// document.getElementById("valuemaskefasthed").focus();                          // Set focus to value-field
document.getElementById("valuemaskefasthed").select();                          // Select 'popup' in value field

document.getElementById("valuecm").value = "indtast cm her";                    // Write 'popup' into value-field
// document.getElementById("valuecm").focus();                                    // Set focus to value-field
document.getElementById("valuecm").select();                                    // Select 'popup' in value field

calculate(); 
}                                                                                // Calculate -> '- - - - -' in result

function newValuecm()            { calculate();    }                            //>NewValue - omregner ved ny værdi
function newValuemaskefasthed()  { calculate();    }                            //>NewValue - omregner ved ny værdi 


function calculate() {                                                            //>Calculate
//placering af ----- hvis fejl i input
var input      = document.getElementById("valuecm").value;                      // Content (text) of input-value
var white      = input.match(/\s*/);                                            // White spaces in input (for opera)
var valuecm = parseFloat(input.replace(/,/,'.'));                                // Parsed string with ','->'.' or NaN
if (isNaN(valuecm) || (white && input==white)) {                                // No valid number or only whitespaces
    document.getElementById("resultopslag").value="- - - - - -"; 
    document.getElementById("resultopslag80").value="- - - - - -"; 
    document.getElementById("resultopslag90").value="- - - - - -"; 
    return; }                                                                    //    -> Clear result value

var input = document.getElementById("valuemaskefasthed").value;                  // Content (text) of input-value
var white = input.match(/\s*/);                                                  // White spaces in input (for opera)
var valuemaskefasthed = parseFloat(input.replace(/,/,'.'));                      // Parsed string with ','->'.' or NaN
if (isNaN(valuemaskefasthed) || (white && input==white)) {                      // No valid number or only whitespaces
    document.getElementById("resultopslag").value="- - - - - -"; 
    document.getElementById("resultopslag80").value="- - - - - -"; 
    document.getElementById("resultopslag90").value="- - - - - -"; 
    return; }                                                                    //    -> Clear result value

//selve beregningerne her
var resultopslag = valuemaskefasthed * valuecm /10 ;                            //  Else: Convert value to result
document.getElementById("resultopslag").value = Math.round(resultopslag);        //      Write result in text-field

var resultopslag80 = valuemaskefasthed * valuecm / 10 * 0.8;                    //  Else: Convert value to result
document.getElementById("resultopslag80").value = Math.round(resultopslag80);                //      Write result in text-field

var resultopslag90 = valuemaskefasthed * valuecm / 10 * 0.9;                //  Else: Convert value to result
document.getElementById("resultopslag90").value = Math.round(resultopslag90); //      Write result in text-field

// ved at gange med 10 og senere dividere det afrunded, så fås 1 decimal

}
//-->
</script>
Avatar billede Slater Ekspert
14. marts 2009 - 00:04 #1
Så vidt jeg kan se inkluderer du et fuldt HTML-dokument med <html> og <head> og <body> og hele svineriet, i et andet HTML-dokument, der også har alle disse ting. Det vil aldrig gå godt, og hvis det virker på Firefox og Chrome, er det kun held.
Avatar billede IreneB Nybegynder
14. marts 2009 - 10:26 #2
Glemte vist at skrive at jeg er ret ny i dette her. Det er mit første script og min første hjemmeside.

Jeg går ud fra at løsningen er at støvsuge html-filen hvor mit script ligger i helt ned til at det kun indeholder script, og så omdøbe den til .js-fil, som inkluderes øverst i body'en? 
og så overfører <body onLoad="initialize(); til php-filen?
Avatar billede Slater Ekspert
14. marts 2009 - 10:43 #3
Hvis du kan støvsuge indholdsfilen ned til kun at indeholde Javascript, så er der slet ingen grund til at include det i PHP. Så bruger du bare:
<script type="text/javascript src="filensnavn.js"></script>
i almindelig HTML i den indeholdende side.

Det er bedre end at inkludere den, fordi .js-filen så bliver cachet på de besøgendes computere, hvilket gør den bliver hentet lidt hurtigere når de klikker rundt på siden.

- Men i den fil du inkluderer, er der jo altså også en del HTML, så spørgsmålet er om du overhovedet kan barbere den ned til kun script? - Ellers bliver du nødt til i hvert fald at skære alle de tags væk, som der kun må være én gang i et HTML-dokument, deriblandt <html>, <body>, <head> - og alt der er inde i <head>-sektionen i, den inkluderede fil.
Avatar billede IreneB Nybegynder
14. marts 2009 - 16:50 #4
Så har jeg fået støvsuget html-filen, omdøbt til js og herefter sat den ind som du beskrev
<script type="text/javascript src="filensnavn.js"></script>

Resultatet kan ses her:
http://www.paapinden.dk/tipsogtricks/2-beregn-opslag.php
http://www.paapinden.dk/tipsogtricks/beregn-opslag/2-opslag-script.js

Det fungerer fint i alle browsere, men der er et lille problem. Jeg har bygget min side op i templates og body-tagget er ikke-editerbart. Af en eller anden årsag som jeg ikke kender, kan jeg ikke gøre body-tagget editerbart uden at droppe templaten.

Det gør så, at jeg ikke kan tilføje onLoad="initialize(); til body-tagget uden at tilføje det til samtlige sider eller alternativt droppe templaten. Sidste løsning er uholdbar, og det går jeg ud fra at første også er? er der evt. andre løsninger på problemet?
Avatar billede Slater Ekspert
14. marts 2009 - 16:53 #5
Jeg skal lige forstå dig ret: skal funktionen initialize() kun køres på nogle af siderne ved onload?
Avatar billede IreneB Nybegynder
14. marts 2009 - 20:57 #6
ja det er korrekt forstået. Jeg skal kun bruge scriptet på den ene side.
Jeg har fundet ud af at jeg ved en bagvej, kan gå ind og ændre body-taggen i en anden editor. Men den er jo heller ikke langtidsholdbar, for hvis templaten opdateres så er ændringen strøget
Avatar billede Slater Ekspert
14. marts 2009 - 21:17 #7
Well, umiddelbart skal du jo så bare nøjes med at inkludere script-tagget på den side der skal bruge det, og så skrive
window.onload = initialize;
- i selve scriptet, i stedet for at sætte din onload i body-tagget.
Avatar billede IreneB Nybegynder
14. marts 2009 - 22:08 #8
ahhh - jamen se der. Jeg er jo en ung vårhare på feltet! Tusind tak for hjælpen - nu skulle problemet så vidt jeg se være løst. Ved ikke lige hvorfor jeg faldt i den fælde med dobbelt-tags, den troede jeg da egentlig at jeg kendte i forvejen
Avatar billede Slater Ekspert
15. marts 2009 - 10:24 #9
Jamen jeg tillader mig da at smide et svar, hvis der ikke er mere. Ellers siger du bare til :)
Avatar billede IreneB Nybegynder
15. marts 2009 - 15:10 #10
jamen slf, jeg sad og funderede over hvordan det virkede :o)
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