Prijsaanpassing bij meerdere stuks.

Status
Niet open voor verdere reacties.

yammaski

Gebruiker
Lid geworden
9 mrt 2005
Berichten
284
De prijs wordt aangepast aan de hand van de gekozen afmeting.
Nu zou ik deze prijs nog eens willen aanpassen/tonen in functie van het gekozen aantal.
De kortingen staan vermeld op de testpagina.

Zie testpagina.

Kan iemand mij hiermee op weg helpen ?
Zip-bestand in bijlage.


Yam.

Bekijk bijlage Prijs_Aantal.zip
 
Zie hier:
HTML:
<html>
<body>
<script type="text/javascript">
function aantal()
{
var y="getal" ;
var x="document.getElementById("naam van tekstvak").value;
x = parseInt(x,10);
if (x > 3  &&  x < 6  &&  x=3)
{
document.write(y -y*0.2);
}
else if(x > 6  &&  x < 10  &&  x = 6)
{
document.write(y- y*0.3);
}
else if (x > 10 &&  x = 10 )
{
document.write(y - y * 0.35);
}
}
</script>
</body>
</html>

Die functie roep je dan aan.
Ik ben nog niet erg goed in progammeren maar misschien kan dit je helpen.

Webdesigner 4,
 
Laatst bewerkt:
Sorry, maar er gebeurt niets.
Mijn programma kleur Lijn 17 [JS]else if(x>=10 ); [/JS]als fout !?
 
Ik heb het script al geprobeerd te verbeteren, snap alleen niet waarom hij niet werkt.
De kleuren kloppen idd niet.
Misschien ziet iemand hier een fout in?

Webdesigner 4,
 
De fout was te wijten aan een ";" die er teveel stond bij mij.:eek:

Het tekstvak is leeg na "Submit", kan het hier aan liggen ?
[JS]var x="document.getElementById("naam van tekstvak").value[/JS]

Of misschien komen de id's niet overeen in mijn script !?
Zie aangepaste testpagina.
 
Volgens mij klopt dit niet aan het script dat je net hebt gepost:
[js]


var x="document.getElementById("naam van tekstvak").value
// Het ene aanhalingsteken voor document moet weg, en de punt komma moet er wel achter.

[/js]

Het wordt dan:
[js]
var x=document.getElementById("naam van tekstvak").value;
[/js]

Webdesigner4,
 
Laatst bewerkt:
Volgens mij klopt dit niet aan het script dat je net hebt gepost:

Dit is het laatste script ... toch volgens jouw opgave !?
[JS]function aantal()
{
var y="Prijs" ;//Dit is de totaalprijs de je al hebt staan
var x= document.getElementById("cmPrice").value ;
x=parseInt(x,10);

if (x < 3)
{
document.write(y);
}

else if (x >= 3 && x < 6)
{
document.write(y -y*0.2);
}

else if(x >= 6 && x < 10)
{
document.write(y- y*0.3);
}

else if(x >= 10);
{
document.write(y-y*0.35);
}

}[/JS]

Ik heb enkel de conditie < 3 toegevoegd, of hoeft dit niet ?:confused:
 
Er kloppen een paar dingen niet aan het script (dat online staat).
[js]var y="Prijs" ;//price[/js]
Dit lijkt me een placeholder. Verderop in het script worden er berekeningen uitgevoerd met de variabele 'y' en dat kan nooit als 'y' een string is. Maak hier eens van
[js]var y = document.getElementById("cmPrice").innerHTML;
y=parseInt(y,10);[/js]

Verder werkt document.write niet als de pagina al geladen is. In dat geval moet je de tekst via innerHTML wijzigen. Ik zou het zo doen:
[js]function aantal()
{
var y = document.getElementById("cmPrice").innerHTML;
y=parseInt(x,10);
var x= document.getElementById("stickersBE_1_Quantity_Add").value ;//number of products
x=parseInt(x,10);

if (x < 3)
{

}

else if (x >= 3 && x < 6)
{
y = y * 0.8; // is hetzelfde als y = y - y * 0.2
}

else if(x >= 6 && x < 10)
{
y *= .7; // verkorte notatie voor y = y * 0.7
}

else if(x >= 10);
{
y *= 0.65;
}
document.getElementById("cmPrice").innerHTML = y;
}[/js]

Niet getest, maar dit zou moeten werken. Ik vrees alleen wel dat er problemen optreden als iemand na het drukken op "Submit" het formaat wijzigt.
 
Dat komt omdat de functie "aantal" aangeroepen wordt als een van de knoppen (omhoog of omlaag) verandert ("onChange"). Dit is nooit het geval. Je kan de aanroep naar deze functie beter toevoegen aan de onClick's van deze knoppen (en evt. met een onChange van het tekstvak (hoewel dat bij mijn test rare effecten heeft)):
HTML:
<input name='add' type='button' class="Aantal_Add" onclick='document.getElementById("stickersBE_1_Quantity_Add").value++;this.blur();aantal()' />
<input name='subtract' type='button' class="Aantal_Min" onclick='subtractQty();this.blur();aantal()' />

Ook moet je in de functie "aantal" nog even de puntkomma op regel 23 (achter "else if(x >= 10)") weghalen.
 
Hoi Yammaski en Supersnail,
Ik heb niet gekeken naar bovenstaande code en de scripts van de testpagina, maar ben met schone lei begonnen, en heb zachtjes van boven naar beneden gewerkt:
  • Alles voor het gemak in een tabel gestopt (die wiebelt af een toe een beetje in de opmaak).
  • Geen <form> met submitknop gemaakt, maar alle invulbare en keuze-vakjes voorzien van een onkeyup="berekenAlles()" resp. een onchange="berekenAlles()", zodat wat je ook aanraakt, altijd de hele berekening overnieuw gemaakt wordt.
    Hiermee is het bezwaar verholpen dat er na de Submit-knop nog iets veranderd wordt maar de berekening hetzelfde blijft.
  • Het geheel kan natuurlijk wel in een <form> met submitknop gestopt worden, voor als men klaar is met grasduinen in de mogelijkheden.
  • De option-values van de formaten heb ik de opslag-prijs in Euro's meegegeven, zodat deze getallen meteen mee kunnen doen in de berekening.
  • Als tussenfase is er de "Stuksprijs" = beginprijs + formaat-toeslag.
  • Als nu een aantal ingevuld wordt, ligt het hele vervolg vast:
    subtotaal = stuksprijs * aantal,
    met een paar if's worden het aantal herleid tot het kortingspercentage,
    kortingsbedrag = subtotaal * kortingspercentage, en
    totaal = subtotaal - kortingsbedrag.​
  • Het aantal kan zowel in de textbox ingevuld worden als met de knopjes per 1 omhoog of omlaag.
  • In de uitkomsten alle punten vervangen door komma's en achter de komma opgevuld met decimaal-nullen als die ontbreken.
  • Resteert het fool-proof maken voor verkeerde invullingen: aantal moet een getal zijn, aantal mag niet 0 of negatief zijn, en aantal mag ook geen breuk zijn.

Aldus kwam het tot deze: kwantumkorting-demo.htm


  • Getest in Firefox, Chrome, Opera en Safari.
  • En ook IE7 lukt het niet 'm te kraken. ;)

Komt die in de buurt?

Met vriendelijke groet,
CSShunter
 
---> Supersnail : zo werkt het, maar de korting wordt toegepast telkens je het aantal aanpast. Dus van 2 naar 3, nog eens van 3 naar 4, ... .

---> csshunter : dit werkt perfect :thumb:

Allebei erg bedankt voor jullie hulp. Ik leer er altijd heel wat van bij. :)
 
Hoi Yam,
Hoeps! Toch nog een lek! :eek:
Maar gelukkig nog door niemand ontdekt. ;)

Als iemand in de aantallen-box namelijk niet een getal invult via het toetsenbord of via de up/down pijltjes, maar door copy-paste (dat zou een enkeling kunnen doen), dan reageert de functie berekenAlles() aan geen kanten.

Voor Firefox, Chrome, Opera en Safari kan je bij het input-veld toevoegen oninput="berekenAlles()", dan loopt dat ook.
Maar ... natuurlijk niet in IE (en zeker niet in IE<9).
Daarvoor zou onpaste="berekenAlles()" (IE only) moeten werken, maar doet dat mooi niet in IE7.

Afijn, zo ongeveer het hele rijtje mogelijkheden oninput="berekenAlles()" / onkeyup="berekenAlles()" / onpropertychange="berekenAlles()" / onrightclick="berekenAlles()" / onblur="berekenAlles()" / onmousemove="berekenAlles()" / onmouseleave="berekenAlles()" / enz. uitgeprobeerd, maar bij een textbox werken die allemaal niet.



Na wat omzwervingen op Google uiteindelijk een workaround tegen het lijf gelopen: om de 0,1 sec. checken of er al iets in de textbox veranderd is. Zo nee, niets doen, en zo ja: bereken alles!
Dit werkt crossbrowser op de value van de textbox: zowel bij toetsenbord-, als up/down- als copy/paste-operaties.



Met vriendelijke groet,
CSShunter

[edit]Op 15-11-2011 nog een verbetering aangebracht, zie nr. #16 hieronder[/edit]
 
Laatst bewerkt:
Ik heb het niet getest, maar zou onchange niet de best oplossing zijn? Het werkt op input velden en zelfs met de oude versies van IE.
 
Hoi Naarling,
Nee, onchange="berekenAlles()" heb ik ook geprobeerd, maar die geeft bij waardes plakken in een textbox geen onmiddellijk resultaat: dan moet je eerst ergens anders buiten de textbox op klikken. *)
Met onmouseup: idem dito.
Test met onchange en onmouseup op de textvelden: kwantumkorting-demo-3.htm

Rare jongens, die textboxen!

O, Attentie!
  • Nog een verbetering gemaakt in kwantumkorting-demo-2.htm
  • De onkeyup moet er toch ook nog bij, voor dezulken die niet met de muis inplakken, maar met Ctrl-V op het toetsenbord! :)

Met vriendelijke groet,
CSShunter
__________
*) De onchange op het select-keuzerijtje geeft wel real-time de veranderingen door (net als de onclick op de up/down input-buttons), en ook een onkeyup op een textbox werkt wel realtime!
 
amai csshunter :) ... je gaat wel ver, maar goed :thumb:

Ik had graag de stukprijs met de korting ook apart gehad.
Ik heb dit nu gedaan door het totaal te delen door het aantal.
Is dit volgens de "regels" ?

Zie testpagina.

De kortingpercentages heb ik ook iets aangepast ... er moet ook nog iets binnenkomen è !? ;)
 
Hoi Yammaski,
Mwoa ... zoals nu vind ik het er niet duidelijker op geworden :rolleyes::

kk-korting1.png


  • Wat "stuksprijs-korting" heet, is eigenlijk "stuksprijs incl. korting"
  • Een "stuksprijs-korting" zou zijn: alleen het kortingsbedrag per stuk.

  • Maar hoe dan ook staat nu de "stuksprijs incl. korting" boven het subtotaal, als de kwantumkorting er nog niet van af is. Het bedrag komt verder ook niet terug in de berekening, wat nogal verwarrend werkt.
  • Een betere plek zou zijn: helemaal onderaan, nog onder het totaal, en dan tussen haakjes:

kk-korting2.png


  • Ik zou ook de "stuksprijs incl. korting" weglaten als er geen korting is (bij 1 of 2 stuks).

Terugdelen lijkt me prima, maar ik zal nog even de script-code induiken.

... er moet ook nog iets binnenkomen è !? ;)
Ja, stond ook al verbaasd van de grote kortingen! :d
En 15% korting bij afname van 3 stuks is nog steeds aan de stevige kant, lijkt me! (en de rest ook; maar ik ken de branche niet)

Met vriendelijke groet,
CSShunter
 
Ik had geen rekening gehouden met de volgorde of plaats van de gegevens, ik teste enkel of het werkte. Het wordt gebruikt op een detail-pagina. Daaronder staat de prijs en als je het aantal verhoogt moet de prijs met korting getoond worden. Zie Stukprijs_korting-1.jpg : 5,00 euro wordt dan de prijs naargelang het aantal.
Ik hoop dat het iets duidelijker is nu. :rolleyes:
 
Aha, dan is dat misverstand van de baan. :)
Ik heb intussen even het javascript bekeken, en dat lijkt me volledig correct. :thumb:

Met vriendelijke groet,
CSShunter
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan