Avatar billede stkol Nybegynder
15. maj 2005 - 10:36 Der er 18 kommentarer og
1 løsning

Hjælp til insættelse af værdi i JS

Hejsa

Jeg har et script som alt efter hvilket vare nummer man vælger, smider nogle værdier ind i nogle felter, men jeg har også en kalkulator som ligger prisen sammen alt efter hvad antal der vælges. Jeg kan ikke få den til at ligge værdien ind i den felt hvor scriptet skal have at vide hvilken pris produktet har

Linen hvor problemet er:

<input style="width: 90px;" class="inputboxright" type="text" name="antal<%=trim(linenr2rs("linenr"))%>" id="antal<%=trim(linenr2rs("linenr"))%>" onkeyup="calc('total<%=trim(linenr2rs("linenr"))%>', antal<%=trim(linenr2rs("linenr"))%>.value, 'HER SKULLE PRISEN STÅ')">



Hele source koden:

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

<html>
<head>

    <title>Ordre Seddel</title>

    <link rel="STYLESHEET" type="text/css" href="../../../frame/holmbergcss.css">


<script language="javascript"><!--
function ciffer2(total) {
        if ((i = total.indexOf('.')) > -1) {
            tmpstr = total.substring(++i);
            total = total.substr(0, i);
            if (tmpstr.length < 2) {
                resstr = tmpstr;
                for (c = tmpstr.length; c < 2; c++)
                    resstr += '0';
            } else {
                resstr = tmpstr.substr(0, 2);
            }               
            total += resstr;
        } else {
            total += '.00';
        }
        return total;
}

function calc(dest, _amount, _price) {
    amount = parseInt(_amount);
    if (!isNaN(amount)) { //is amount a number
        total = String(amount * parseFloat(_price));
        eval('document.forms[0].'+dest).value = ciffer2(total);
    } else {
        eval('document.forms[0].'+dest).value = '0.00';
    }
    calcTotal();
}

function calcTotal() {
    e = document.forms[0].elements;
    total = 0.0;
    for (i=0; i < e.length; i++) {
        if (e[i].name.indexOf('total')>-1) {
            total += parseFloat(e[i].value);
        }
    }
    document.forms[0].formtot.value = ciffer2(String(total));
}
//-->
</script>   
   

<%
'####### Order Line ############
'## Create db objects and SQL   
set linenrConn = Server.CreateObject("ADODB.Connection")
linenrConn.Open Application("ConnectString")
Set linenrrs = Server.CreateObject("ADODB.Recordset")

linenrSql = "SELECT * FROM orderlinecounter;"

Set linenrrs = linenrConn.Execute(linenrSql)

Do while not linenrrs.EOF

%>   

<script type="text/javascript">
var values<%=trim(linenrrs("linenr"))%>=new Array();

<%
'####### prod price ############
'## Create db objects and SQL   
set prodpriceConn = Server.CreateObject("ADODB.Connection")
prodpriceConn.Open Application("ConnectString")
Set prodpricers = Server.CreateObject("ADODB.Recordset")

prodpriceSql = "SELECT id,description,price FROM product;"

Set prodpricers = prodpriceConn.Execute(prodpriceSql)

Do while not prodpricers.EOF

%>

values<%=trim(linenrrs("linenr"))%>[<%=prodpricers("id")%>] = new Array('<%=left(prodpricers("description"),50)%>', '<%=prodpricers("price")%>.00');

<%   
  prodpricers.MoveNext
  Loop
%>


function populate<%=trim(linenrrs("linenr"))%>(num){
document.getElementById('field<%=trim(linenrrs("linenr"))%>one').value = values<%=trim(linenrrs("linenr"))%>[num][0];
document.getElementById('field<%=trim(linenrrs("linenr"))%>two').value = values<%=trim(linenrrs("linenr"))%>[num][1];
}
</script>


<%   
  linenrrs.MoveNext
  Loop
%>

</head>

<body>
<center>

<form method="post" action="ordreseddel.asp" name="orderlines">
   
<table cellspacing="0" cellpadding="0" border="0" style="width: 666px" class="inputbox">
<tr>
    <td valign="top" align="left" style="width: 666px">   
                                       
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#333366"><font size="1" face="Verdana" color="FFFFFF"><b>Vare Nr.</b></font></td>
<td bgcolor="#333366"><font size="1" face="Verdana" color="FFFFFF"><b>Vare beskrivelse</b></font></td>
<td bgcolor="#333366"><font size="1" face="Verdana" color="FFFFFF"><b>Pris</b></font></td>
<td bgcolor="#333366"><font size="1" face="Verdana" color="FFFFFF"><b>Stk</b></font></td>
<td bgcolor="#333366"><font size="1" face="Verdana" color="FFFFFF"><b>Pris Ialt</b></font></td>
</tr>

<%
'####### Order Line 2 ############
'## Create db objects and SQL   
set linenr2Conn = Server.CreateObject("ADODB.Connection")
linenr2Conn.Open Application("ConnectString")
Set linenr2rs = Server.CreateObject("ADODB.Recordset")

linenr2Sql = "SELECT * FROM orderlinecounter;"

Set linenr2rs = linenr2Conn.Execute(linenr2Sql)

Do while not linenr2rs.EOF

%>

<tr>
<td bgcolor="#333366">
<select style="width: 95px" class="inputbox" name="select" onchange="populate<%=trim(linenr2rs("linenr"))%>(this.options[selectedIndex].value)">
<option value="choose" SELECTED>Vælg</option>
<%
'####### prod ############
'## Create db objects and SQL   
set prodConn = Server.CreateObject("ADODB.Connection")
prodConn.Open Application("ConnectString")
Set prodrs = Server.CreateObject("ADODB.Recordset")

prodSql = "SELECT price,id,varenr FROM product;"

Set prodrs = prodConn.Execute(prodSql)

Do while not prodrs.EOF
%>
<option value="<%=trim(prodrs("id"))%>"><%=trim(prodrs("varenr"))%></option>

<%   
  prodrs.MoveNext
  Loop
%>
</select>


</td>
<td bgcolor="#333366"><input style="width: 300px" class="inputbox" name="field<%=trim(linenr2rs("linenr"))%>one" type="text" id="field<%=trim(linenr2rs("linenr"))%>one"></td>
<td bgcolor="#333366"><input style="width: 90px;" class="inputboxright" name="field<%=trim(linenr2rs("linenr"))%>two" type="text" id="field<%=trim(linenr2rs("linenr"))%>two"></td>
<td bgcolor="#333366"><input style="width: 90px;" class="inputboxright" type="text" name="antal<%=trim(linenr2rs("linenr"))%>" id="antal<%=trim(linenr2rs("linenr"))%>" onkeyup="calc('total<%=trim(linenr2rs("linenr"))%>', antal<%=trim(linenr2rs("linenr"))%>.value, 'field<%=trim(linenr2rs("linenr"))%>two')"></td>
<td bgcolor="#333366"><input style="width: 90px;" class="inputboxright" type="text" name="total<%=trim(linenr2rs("linenr"))%>" value="<%= Session("price" & trim(linenr2rs("linenr"))) %>" readonly></td>
<%
  linenr2rs.MoveNext
  Loop
%>

</tr>
</table>


</td>
</tr>
</table>   


<input type="text" name="formtot" value="0.00" style="width: 80px" readonly>


</form>

</center>

</body>
</html>


Er der en der kan hjælpe mig?? :-)

Mvh

Stig :-)
Avatar billede busschou Praktikant
15. maj 2005 - 10:49 #1
har du et link evt?
Avatar billede stkol Nybegynder
15. maj 2005 - 11:01 #2
Avatar billede busschou Praktikant
15. maj 2005 - 11:15 #3
Ok - jeg kan se du har de her på din side
---
onkeyup="calc('total4', antal4.value, 'field4two')
---
kunne evt overvejes at ændres til
---
onkeyup="calc('total4', antal4.value, 'field4two')
---
Anyway det viser jo at du kalder din funktion rigtig med de rigtige parametre
Når jeg kigger i din funktion calc() og de andre så benytter de alle din "total"
Jeg er i tvivl om du ikke bør erklære din variabel "total" uden for funktionerne
Jeg er ikke sikker på javascripts fortolkning men normalt vis så gælder variable erklæret lokalt i en funktion kun i funktionen
Så prøv at erklære den i toppen af dit skript inden dine funktioner som enten
var total = 0
Avatar billede busschou Praktikant
15. maj 2005 - 11:15 #4
hmm copy paste fejl :o)
Ville foreslå du lavede linjen som
onkeyup="calc('total4', this.value, 'field4two')
Avatar billede busschou Praktikant
15. maj 2005 - 11:17 #5
ellers bør du i hvert fald kalde funktionen calcTotal() med total som parameter
calcTotal(total)
Avatar billede busschou Praktikant
15. maj 2005 - 11:45 #6
Jeg beklager jeg så mig gal på det!
calc skal kaldes med dest,amount og price. Men du kalder den med dest, amount, price_dest. Så du mangler at hive værdien ud af feltet med prisen.. sådan her
function calc(dest, _amount, _price) {
    amount = parseInt(_amount);
    price = parseFloat(document.getElementById(_price).value);
    if (!isNaN(amount)) { //is amount a number
        var total = String(amount * price);
        eval('document.forms[0].'+dest).value = ciffer2(total);
    } else {
        eval('document.forms[0].'+dest).value = '0.00';
    }
    calcTotal(total);
}
Avatar billede busschou Praktikant
15. maj 2005 - 11:47 #7
tastefejl igen
----
function calc(dest, _amount, _price) {
    amount = parseInt(_amount);
    price = parseFloat(document.getElementById(_price).value);
    if (!isNaN(amount)) { //is amount a number
        var total = String(amount * price);
        eval('document.forms[0].'+dest).value = ciffer2(total);
    } else {
        eval('document.forms[0].'+dest).value = '0.00';
    }
    calcTotal();
}
---
Sådan der
Det virker i alt fald hos mig :o)
Avatar billede busschou Praktikant
15. maj 2005 - 11:48 #8
og så skal du ikke som jeg skrev før lave din total global.. det var mig som læste forkert...sorry :o(
Avatar billede busschou Praktikant
15. maj 2005 - 11:51 #9
en anden løsning er selvfølgelig at lave kaldet om til
onkeyup="calc('total4', this.value, this.form.field4two.value)
Så får du værdien frem for id´et over i javascriptet
Så valget er vel enten at sende værdien til javascriptet så det kan regne direkte på den
Eller sende id´et og så lade javascriptet hente værdien
Avatar billede stkol Nybegynder
15. maj 2005 - 13:34 #10
Genielt *S Det virker :-) dog kan jeg ikke lige se hvordan TOTAL skal kaldes *S
Avatar billede busschou Praktikant
15. maj 2005 - 13:48 #11
godt det virker.. så smider jeg et svar :o)
Det med total, hvis det er til en af mine første bemærkninger så bare glem det. Jeg havde ikke kigget ordentlig efter og troede det var den samme total du brugte i alle tre funktioner... men det er det jo ikke :o)
Avatar billede stkol Nybegynder
15. maj 2005 - 14:01 #12
Nej, jeg mener den der er for neden på siden hvor alle felter bliver talt sammen til en total sum *S
Avatar billede stkol Nybegynder
15. maj 2005 - 14:02 #13
denne her :

<input type="text" name="formtot" value="0.00" style="width: 80px" readonly>
Avatar billede stkol Nybegynder
15. maj 2005 - 14:04 #14
Kan man på en eller anden smart måde regne et inkl. moms felt samt et felt bestående kun af momsen??
Avatar billede busschou Praktikant
15. maj 2005 - 14:08 #15
ja moms er det mindste af det.. hvis alle de priser du har nu er med moms så er det uden moms jo "ditfelt.value-ditfelt.value*0.2" ... der skal jo så trækkes 20% fra :o)
kigger lige på det andet
Avatar billede busschou Praktikant
15. maj 2005 - 14:21 #16
ok det var såmen ganske simpelt fordi du løber alle felter igennem for at finde totalen, og da nogen af dem er tomme kommer der fejl. Det undgår du ved følgende:
----
function calcTotal() {
    e = document.forms[0].elements;
    total = 0.0;
    for (i=0; i < e.length; i++) {
        if (e[i].name.indexOf('total')>-1 && e[i].value != "") {
            total += parseFloat(e[i].value)
        }
    }
    document.forms[0].formtot.value = ciffer2(String(total));
}
Avatar billede busschou Praktikant
15. maj 2005 - 14:28 #17
momsen får du med ved at lave to felter mere ala
----
ialt <input type="text" name="formtot" value="0.00" style="width: 80px" readonly>
moms <input type="text" name="moms" value="0.00" style="width: 80px" readonly>
ialt incl moms <input type="text" name="incmoms" value="0.00" style="width: 80px" readonly>
----
og funktionen calcTotal om til at regne dem ud også
----
function calcTotal() {
    e = document.forms[0].elements;
    total = 0.0;
    for (i=0; i < e.length; i++) {
        if (e[i].name.indexOf('total')>-1 && e[i].value != "") {
            total += parseFloat(e[i].value)
        }
    }
    document.forms[0].formtot.value = ciffer2(String(total));
    document.forms[0].moms.value = ciffer2(String(total*0.25));
    document.forms[0].incmoms.value = ciffer2(String(total*1.25));
}
Avatar billede stkol Nybegynder
15. maj 2005 - 14:52 #18
Nej hvor er det godt *SS 1000 mange tak :-)
Avatar billede busschou Praktikant
15. maj 2005 - 14:54 #19
det var så lidt :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