Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Uträkning

Postades av 2007-01-24 22:49:52 - Joachim Feldt, i forum javascript/dhtml, Tråden har 5 Kommentarer och lästs av 713 personer

Hej,
Nu har jag suttit i MÅNGA timmar och försökt skriva ett script som gör några uträkningar, men det går inte.
Jag är för dålig helt enkelt...

Så, är det någon som känner för att hjälpa mig att skriva följande script?

Först har jag två textboxar:
txtUnitPrice, får vara decimaltal och får vara tomt. Får ej vara negativt
txtAmount, får bara vara HELTAL och får vara tomt. Får ej vara negativt

Dessa två skall multipliceras och visas i en textbox, txtSum(som är ReadOnly)

------------------------------------------------------------------------------

Sen har jag på rad två likandant:
txtNextUnitPrice, får vara decimaltal och får vara tomt. Får ej vara negativt
txtNextAmount, får bara vara HELTAL och får vara tomt. Får ej vara negativt

Dessa två skall multipliceras och visas i en textbox, txtNextSum(som är ReadOnly)
Här kan txtNextSum redan ha ett värde när sidan laddas(från databasen), så den summan skall ju inte ändras förrän båda textboxarna före är ifyllda.(om dom fylls i, det är frivilligt)

Resultatet av txtSum + txtNextSum skall visas i en sista textbox, txtTotalSum(som är ReadOnly)

Denna uträkning skall ju göras "on the fly", vid onblur, eller vad man nu kan tänkas använda? Man skall alltså inte klicka på någon knapp, utan när du t ex lämnar ett textfält görs hela uträkningen.

Någon som har lust/ork att hjälpa mig?

/Jocke


Svara

Sv: Uträkning

Postades av 2007-01-25 13:32:15 - Joachim Feldt

Nu har gjort en lösing som troligen är ganska ful.....?

Det funkar som jag vill att det ska göra, men det känns inte så riktigt ändå...

Någon av er kanske ser hur man kan snygga upp denna kod något?

Som ni ser anropar jag två nästan identiska funktioner beroende på om jag ska validera heltal eller decimaltal. På texboxarna har jag lagt onBlur="return CalcAndVerifyOnlyFloat(txtBoxId);", alt. onBlur="return CalcAndVerifyOnlyInteger(txtBoxId);"

Det borde ju gå att göra mycket snyggare?

Textboxarna heter lite annat här än vad jag skrev ovan:

txtQuantity(är intger) * txtUnitPrice(är float) = txtPhoneCosts (float)
txtCartonQuantity(är integer) * txtCartonUnitPrice(är float) = txtPackagingCosts (float)

txtPhoneCosts + txtPackagingCosts = txtTotalCosts

<code>
<script language="javascript">

function CalcAndVerifyOnlyFloat(field)
{
newValue = field.value.replace(",",".");
field.value = newValue;

if(isNaN(newValue) || newValue < 0)
{
alert("Must be a numeric value!");
field.focus();
field.select();
return false;
}
else
{
CalcPhoneCosts();
CalcCartonCosts();
CalcTotalCost();
return true;
}
}

function CalcAndVerifyOnlyInteger(field)
{
newValue2 = field.value.replace(",",".");
field.value = newValue2;

if(newValue2.length > 0)
{
if(parseInt(newValue2)!=newValue2-0 || newValue2 < 0)
{
alert("Must be a numeric value, no decimals or letters!");
field.focus();
field.select();
return false;
}
else
{
CalcPhoneCosts();
CalcCartonCosts();
CalcTotalCost();
return true;
}
}
else
{
CalcPhoneCosts();
CalcCartonCosts();
CalcTotalCost();
return true;
}
}

function CalcPhoneCosts()
{
Quantity = document.getElementById("<%=txtQuantity.ClientID%>").value;
UnitPrice = document.getElementById("<%=txtUnitPrice.ClientID%>").value;
var total = UnitPrice * Quantity;
document.getElementById("<%=txtPhoneCosts.ClientID%>").value = total;
}

function CalcCartonCosts()
{
Quantity = document.getElementById("<%=txtCartonQuantity.ClientID%>").value;
UnitPrice = document.getElementById("<%=txtCartonUnitPrice.ClientID%>").value;
if(Quantity.length > 0 && UnitPrice.length > 0 && parseInt(Quantity) >= 0 && parseFloat(UnitPrice) >= 0)
{
var total = UnitPrice * Quantity;
document.getElementById("<%=txtPackagingCosts.ClientID%>").value = total;
}
}

function CalcTotalCost()
{
totPhoneCosts = parseFloat(document.getElementById("<%=txtPhoneCosts.ClientID%>").value);
totCartonCosts = parseFloat(document.getElementById("<%=txtPackagingCosts.ClientID%>").value);
totalCosts = totPhoneCosts+totCartonCosts;
document.getElementById("<%=txtTotalCosts.ClientID%>").value = Math.round(totalCosts*100)/100;
}

</script>
</code>


Svara

Sv:Uträkning

Postades av 2007-01-25 17:27:54 - Niklas Jansson

Utan att ha gjort några närmare studier av koden har jag en snabb uppsnyggning;

function CalcCosts(){
CalcPhoneCosts();
CalcCartonCosts();
CalcTotalCost();
}


För att få bort en del upprepning.

Och slå ihop de två if-satserna till

if(newValue2.length > 0 && parseInt(newValue2)!=newValue2-0 || newValue2 < 0)

(javascript har väl short-circuiting?)


Svara

Sv: Uträkning

Postades av 2007-01-26 14:07:06 - Joachim Feldt

Tackar!
Nu blev det i alla fall lite bättre.

/Jocke


Svara

Sv:Uträkning

Postades av 2007-01-26 19:25:59 - Niklas Jansson

Och om du kan tänka dig att byta lite namn så kan du även parametrisera lite:

function CalcCost(type)
{
Quantity = document.getElementById("<%=txt" + type + "Quantity.ClientID%>").value;
UnitPrice = document.getElementById("<%=txt" + type + "UnitPrice.ClientID%>").value;
if(Quantity.length > 0 && UnitPrice.length > 0 && parseInt(Quantity) >= 0 && parseFloat(UnitPrice) >= 0) {
var total = UnitPrice * Quantity;
document.getElementById("<%=txt" + type + "Costs.ClientID%>").value = total;
}
}


function CalcPhoneCosts()
{
CalcCost("Phone");
}

function CalcCartonCosts()
{
CalcCost("Carton");
}

Genom att parametrisera på float eller int (en parameter "isFloat", typ), kan du även fixa båda de funktionerna, och sen skriva:

var ok;
if(isFloat)
ok = isNan(...) ...;
else
ok = ...;

if (ok){
alert(...)
...
}
else {
...
}


Svara

Sv: Uträkning

Postades av 2007-01-27 14:30:40 - Joachim Feldt

Tack Niklas!!

Set mycket bättre ut. Skall prova detta på måndag.

/Jocke


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 705
27 958
271 751
850
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies