Avatar billede henrik2000 Nybegynder
08. juli 2002 - 09:03 Der er 17 kommentarer og
1 løsning

problemer med InnerHTML

Hej!

jeg har fået dette her til at virke:

I head:
<script LANGUAGE="javascript">
<!--
    function Change(resultat)
    {
   
        resultat = ((document.form1.kr.value * document.form1.indtast.value) / 100)
   
        tal.innerHTML = "" + resultat + "";
   
    } 
//-->
</script>

I body:
<form name="form1">
<%
Response.Write "<input type=""text"" name=""kr"" size=""4"" value="""">kr"
Response.Write "<input type=""text"" name=""indtast"" size=""4"" onchange=""Change('resultat')"">%<br>"

Response.Write "Resultatet er:<div id=""tal"">&nbsp;</div>"
%>
</form>

Indtast kr og % og resultatet bliver lavet i et <div>-tag. Nu vil jeg så gerne bruge det i en loop med indholdet fra databasen. Så gør jeg sådan her:

set conn = Server.CreateObject("ADODB.Connection")
conn.Open Application("Connection_Service")

'finder nogle tilfældige tal til test
sql = "SELECT * from instrument WHERE instrumentid < 40"
set RS = conn.Execute(sql)

        Do While Not rs.eof
       
            Response.Write "<tr><td><input size=""5"" type=""text"" name=""kr"" value=""" & RS("instrumentid") & """>kr&nbsp;&nbsp;<input type=""text"" name=""indtast"" size=""4"" onchange=""Change('resultat')"">%&nbsp;&nbsp;Resultatet er:<div id=""tal"">&nbsp;</div><br></td></tr>"

            RS.MoveNext
       
        Loop
           
Conn.Close
Set conn = Nothing


Men det virker ikke rigtigt - hvad gør jeg forkert?
08. juli 2002 - 09:48 #1
Du vil få flere felter der hedder det samme, og så bliver JavaScripten smader forvirret.(name="kr")

Så dine felter skal hedde noget unikt, f.eks.: Name="kr1", Name="kr2"

Ikke noget problem når du laver et loop at lægge en til for hver gang.

Dog skal dit javascript, også til at lægge flere felter sammen, jeg ville udbygge din javascript function til at du kan give den et tal med:
<script LANGUAGE="javascript">
<!--
    function Change(resultat,feildNo)
   

/chris
Avatar billede henrik2000 Nybegynder
08. juli 2002 - 09:53 #2
jeg har givet input-fields forskellige værdier, men det virker stadig ikke.
kan du hjælpe mig lidt med at ændre i javascripten med det fieldNo du selv er inde på?
Avatar billede =maddog= Nybegynder
08. juli 2002 - 11:20 #3
lav tal.innerHTML = "" + resultat + "";
om til document.getElementById('tal').innerHTML = "" + resultat + "";
Avatar billede =maddog= Nybegynder
08. juli 2002 - 11:25 #4
og det med fieldNo. hvis du kalder din første kr for kr1 og den anden kr2, og indtast -> indtast1 og indtast2
function Change(field)  {
    resultat = (eval('document.form1.kr'+field+'.value') * eval('document.form1.indtast'+field+'.value')) / 100)
    document.getElementById('tal').innerHTML = "" + resultat + "";
}
Avatar billede henrik2000 Nybegynder
08. juli 2002 - 12:04 #5
jeg kan ikke rigtig få det til at virke...
jeg har givet alle inputbokse et unikt ID-felt fra databasen, men det er vel navnet og ikke ID på input-boksene der er vigtige, ikke?

Nu ser min kode således ud:
<script LANGUAGE="javascript">
function Change(field)  {
    resultat = (eval('document.form1.kr'+field+'.value') * eval('document.form1.procent'+field+'.value')) / 100)
    document.getElementById('tal').innerHTML = "" + resultat + "";
}
</script>

<form name="form1">

<%

set conn = Server.CreateObject("ADODB.Connection")
conn.Open Application("Connection_Service")

sql = "SELECT * from testtabel"
set RS = conn.Execute(sql)

        Do While Not rs.eof
       
          Response.Write "<tr><td><input id=""" & RS("IDkr") & """ size=""5"" type=""text"" name=""kr"" value=""" & RS("id") & """>kr&nbsp;&nbsp;<input type=""text"" id=""" & RS("IDprocent")  & """ name=""procent"" size=""4"" onchange=""Change('resultat')"">%&nbsp;&nbsp;Resultatet er:<div id=""tal"">&nbsp;</div><br></td></tr>"
     
            RS.MoveNext
       
        Loop
           
Conn.Close
Set conn = Nothing

%>

hvilket resultat får i når i kører min kode?
Avatar billede henrik2000 Nybegynder
08. juli 2002 - 12:14 #6
lige nu er fejlen:
document.form1.krresultat.value is null or not an object

min inputboks har onchange=""change('resultat')"" - har det noget med den at gøre?
Avatar billede =maddog= Nybegynder
08. juli 2002 - 16:26 #7
jeg kan ikke køre ASP, men kun JSP og cgi-binaries.
Var det muligt du gad poste dit HTML output fra serveren i stedet for.
Avatar billede henrik2000 Nybegynder
09. juli 2002 - 08:16 #8
Du kan bare prøve at lave nogle inputbokse i html med forskellige ID`er/navne og så prøve at få resultatet ud i en alertbox - det er faktisk det jeg prøver på. Så kan jeg altid putte ASP på senere. Men jeg tror der skal laves et array, men det kender jeg ikke lige så meget til. Du må meget gerne prøve at hjælpe.

eks:
<input type="text" name="kr1" size="4" value="">kr&nbsp;
<input type="text" name="procent1" size="4" onchange="Change('resultat')">%
<br>Resultatet er:<div id="tal">&nbsp;</div>

<input type="text" name="kr2" size="4" value="">kr&nbsp;
<input type="text" name="procent2" size="4" onchange="Change('resultat')">%
<br>Resultatet er:<div id="tal">&nbsp;</div>
09. juli 2002 - 09:28 #9
Hej Henrik, desværre var vores net nede i hele dage igår:-(

Nå men jeg har bixen en et nyt script sammen(IE)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
</head>

<body>
<script LANGUAGE="javascript">
<!--
    function Change(xval,yval,x){
    resultat = ((xval * yval) / 100)
        x.innerHTML = "" + resultat + "";
    } 
//-->
</script>

<form name="form1">

<input type="text" name="kr1" size="4" value=""> kr
<input type="text" name="indtast1" size="4" onchange="Change(document.form1.kr1.value,document.form1.indtast1.value,tal1);"><br>

Resultatet er:<div id="tal1">&nbsp;</div>

<input type="text" name="kr2" size="4" value=""> kr
<input type="text" name="indtast2" size="4" onchange="Change(document.form1.kr2.value,document.form1.indtast2.value,tal2)"><br>

Resultatet er:<div id="tal2">&nbsp;</div>

</form>
Avatar billede henrik2000 Nybegynder
09. juli 2002 - 09:36 #10
Tak for det - hvorfor virker det ikke i Netscape???
(det skal det desværre!)
jeg tester lige og vender tilbage.
09. juli 2002 - 09:47 #11
der skal du vist bruge getElementById("tal2") i stedet for
Avatar billede henrik2000 Nybegynder
09. juli 2002 - 09:55 #12
det virker fint - tak for hjælpen!

men hvorfor virker det ikke i Netscape????
09. juli 2002 - 10:22 #13
>>getElementById("tal2") isteden for at få fat i id på din DIV

Som i dette svenske eks.:

Men jeg ved bar ikke hvad syntaxen er for at du kan putte x ind i steden for:-(


if (document.all)            //Explorer 4,5
{
    document.all["tal2"].innerHTML = "" + resultat + "";
    // Även detta går för IE:
    // document.getElementById("andra").style.visibility="hidden";
}
else if (document.layers)        //Netscape 4
{
    document.layers["tal2"].innerHTML = "" + resultat + "";
    // Även detta går för NN 4:
    // document["forsta"].document["andra"].visibility="hidden";
    // Detta går INTE för NN 4:
    // document.layers["andra"].visibility="hidden";
}
else if (document.getElementById)    //Netscape 6
{
    document.getElementById("tal"].innerHTML = "" + resultat + "";
    // Även detta går för NN 6:
    // document.getElementById("andra").style.visibility="hidden";
}
Avatar billede henrik2000 Nybegynder
09. juli 2002 - 14:12 #14
Lige et dumt spørgsmål:

når jeg siger :
function Change(krval,procentval,tal){
alert('document.form1.kr'+krval+'.value');
}
så bliver alertboksen = "document.form1.kr100.value" istedet for bare "100"

det er sikkert bare en dum syntaksfejl...????
Avatar billede nikolajdu Nybegynder
09. juli 2002 - 14:13 #15
alert(document.form1.elements["kr"+krval].value);

Mon ikke det virker i stedet....
Avatar billede henrik2000 Nybegynder
09. juli 2002 - 14:41 #16
nej, så bliver fejlbeskeden 'document.form1.elements[...].value' is null or not an object
Avatar billede nikolajdu Nybegynder
09. juli 2002 - 15:12 #17
prøv at evaluere den først så :)

alert(eval(document.form1.elements["kr"+krval].value));
Avatar billede henrik2000 Nybegynder
09. juli 2002 - 15:27 #18
jeg fandt ud af det.
jeg har fjernet "value" fra onchange og bruger dem så først i javascript-funktionen:

function Change(okr,oprocent,otal){
       
       
        var n = oprocent.value;
        var k = okr.value;
       
        n = n.replace(",",".");
       
        if (isNaN(n) ==true){
            alert('Du skal indtaste et tal i feltet');
            return false;
        }
       
        resultat = ((k * n) / 100)
               
        otal.innerHTML = "" + resultat + "";
 
    }
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

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