|
| Sammentælling Fra : Danjel |
Dato : 26-01-10 13:43 |
|
hejsa allesammen.
Jeg har en lille side her:
http://www.printlight.dk/bestil-bizcard.php
En venlig sjæl (Tak Martin) i et php forum hjalp mig igang.
Der er en linie hvor man kan vælge antal navne (biznames)
Når man indtaster og trykker enter laver den et tilsvarende antal
linier.
Scriptet er snuppet fra jquery.com, resten kreeret af Martin.
Min næste krise består i sammentællingen.
Jeg har et forsøg fra tidligere i linie 115 med funktionen calcbizcard
().
Denne funktion virker dog ikke efter at jeg har lavet det nummer med
at ændre antallet af linier.
Nogle forslag til hvordan jeg kan få begge dele til at virke??
evt. koder eller andet er selvfølgelig til udlevering hvis det
hjælper.
pft
Danjel
| |
Martin (27-01-2010)
| Kommentar Fra : Martin |
Dato : 27-01-10 00:25 |
|
On 26-01-2010 21:43, Danjel wrote:
> hejsa allesammen.
>
> Jeg har en lille side her:
> http://www.printlight.dk/bestil-bizcard.php
>
> En venlig sjæl (Tak Martin) i et php forum hjalp mig igang.
> Der er en linie hvor man kan vælge antal navne (biznames)
> Når man indtaster og trykker enter laver den et tilsvarende antal
> linier.
> Scriptet er snuppet fra jquery.com, resten kreeret af Martin.
>
> Min næste krise består i sammentællingen.
> Jeg har et forsøg fra tidligere i linie 115 med funktionen calcbizcard
> ().
Sæt en klasse på dine pris felter
fx. class="price"
så kan du hente alle felter med jquery
$prices = $('input.price');
var totalprice = 0;
foreach($prices AS price) {
totalprice += price.attr('value');
}
$('input[name="GrandTotal"]').attr('value', totalprice);
>
> Denne funktion virker dog ikke efter at jeg har lavet det nummer med
> at ændre antallet af linier.
>
> Nogle forslag til hvordan jeg kan få begge dele til at virke??
>
> evt. koder eller andet er selvfølgelig til udlevering hvis det
> hjælper.
>
> pft
> Danjel
| |
Danjel (26-01-2010)
| Kommentar Fra : Danjel |
Dato : 26-01-10 23:21 |
|
> > Min næste krise består i sammentællingen.
> > Jeg har et forsøg fra tidligere i linie 115 med funktionen calcbizcard
> > ().
>
> Sæt en klasse på dine pris felter
> fx. class="price"
>
> så kan du hente alle felter med jquery
> $prices = $('input.price');
>
> var totalprice = 0;
> foreach($prices AS price) {
> totalprice += price.attr('value');
>
> }
>
> $('input[name="GrandTotal"]').attr('value', totalprice);
Ser lovende men, men jeg skal også have lagt det sammen den anden
vej....
Feltet oplag ( qty + i , som kunden selv taster ind) skal ganges med
prc som kommer fra en dropdown ( Prc = document.ordre.prflg.value; )
Jeg er temmelig grøn på javascript, og noget på php, så måske et dumt
spørgsmål:
Kan jeg blande alm javascript med jquery?
Jeg har f.eks. flg.:
***********
// Add start fee (Prcstart)
Totamt = eval(Tot1) + eval(Prcstart);
// If amount is too small, add handling fee
if (Totamt < minamt)
{ Totamt = Totamt + hanfee };
// Set handling fee to zero so that it can be showed correctly to the
user
if (Totamt >= minamt)
{ hanfee = 0 };
// Change form fields to reflect new values
document.ordre.showstart.value = dm(eval(Prcstart));
document.ordre.HanFee.value = dm(eval(hanfee));
document.ordre.GrandTotal.value = dm(eval(Totamt));
***********''
pft
Danjel
| |
Stig Johansen (27-01-2010)
| Kommentar Fra : Stig Johansen |
Dato : 27-01-10 11:11 |
|
Danjel wrote:
[snip en masse]
Det er nogle højst mystiske forslag du får præsenteret.
_Ingen_ clientside validering dúr, højst som en proaktiv validering(aka
tastefejl).
I dit eksempel er der _intet_ der forhindrer mig i at rette totalen til 5
kr.
--
Med venlig hilsen
Stig Johansen
| |
Martin Larsen (27-01-2010)
| Kommentar Fra : Martin Larsen |
Dato : 27-01-10 11:21 |
|
Stig Johansen wrote:
> _Ingen_ clientside validering dúr, højst som en proaktiv validering(aka
> tastefejl).
Nu er det så jo i en clientside gruppe, men det er en vigtig pointe du
har fat i!
Martin
| |
Martin (27-01-2010)
| Kommentar Fra : Martin |
Dato : 27-01-10 11:36 |
|
On 27-01-2010 11:11, Stig Johansen wrote:
> Danjel wrote:
>
> [snip en masse]
>
> Det er nogle højst mystiske forslag du får præsenteret.
>
> _Ingen_ clientside validering dúr, højst som en proaktiv validering(aka
> tastefejl).
>
> I dit eksempel er der _intet_ der forhindrer mig i at rette totalen til 5
> kr.
Nu tjekker man jo også altid (eller det håber jeg da stærkt at man gør)
resultater serverside når formen indsendes.
| |
Peter Farsinsen (27-01-2010)
| Kommentar Fra : Peter Farsinsen |
Dato : 27-01-10 13:29 |
|
Danjel wrote:
> Jeg er temmelig grøn på javascript, og noget på php, så måske et dumt
> spørgsmål:
> Kan jeg blande alm javascript med jquery?
jQuery /er/ JavaScript, så det er allerede blandet sammen.
> Totamt = eval(Tot1) + eval(Prcstart);
Hvorfor eval? Jeg har ikke kigget din kode igennem, men det ser forkert
ud. Måske det er parseInt(); du leder efter?
> // Change form fields to reflect new values
>
> document.ordre.showstart.value = dm(eval(Prcstart));
> document.ordre.HanFee.value = dm(eval(hanfee));
> document.ordre.GrandTotal.value = dm(eval(Totamt));
jQuery er bl.a. rigtig god til at finde elementer i DOM'en. Her ville
jeg eksempelvis bruge noget a la:
$('input[name="showstart"]').val(Prcstart);
Ovenstående hindrer ikke at 'Prcstart' udregnes med den eksisterende kode.
- Peter
| |
Rune Jensen (27-01-2010)
| Kommentar Fra : Rune Jensen |
Dato : 27-01-10 14:10 |
|
Peter Farsinsen skrev:
> Danjel wrote:
>
>> Jeg er temmelig grøn på javascript, og noget på php, så måske et dumt
>> spørgsmål:
>> Kan jeg blande alm javascript med jquery?
>
> jQuery /er/ JavaScript, så det er allerede blandet sammen.
Ja. Men man kan ikke bruge de syntacer i snakker om i JS uden først at
hente JQuery-frameworket ind, og jeg regner med at client-side drejer
sig om *standard* syntaxer??
Der er et hav af frameworks derude, hvad med at oprette en gruppe
specielt til frameworks?
MVH
Rune Jensen
| |
Peter Farsinsen (27-01-2010)
| Kommentar Fra : Peter Farsinsen |
Dato : 27-01-10 14:25 |
|
Rune Jensen wrote:
>> jQuery /er/ JavaScript, så det er allerede blandet sammen.
>
> Ja. Men man kan ikke bruge de syntacer i snakker om i JS uden først at
> hente JQuery-frameworket ind, og jeg regner med at client-side drejer
> sig om *standard* syntaxer??
Nu hedder gruppen jo ikke d.e.i.w.javascript, men *.clientside. Det
ville være fint, hvis JavaScript og manipulation af DOM virkede
'standardiseret' på tværs af browsere, men det er jo ikke tilfældet og
dét er netop et af de problemer de fleste frameworks forsøger at råde
bod på.
> Der er et hav af frameworks derude, hvad med at oprette en gruppe
> specielt til frameworks?
Vil du ikke hellere ha' en javascript gruppe så?
- Peter
| |
Rune Jensen (27-01-2010)
| Kommentar Fra : Rune Jensen |
Dato : 27-01-10 15:04 |
|
Peter Farsinsen skrev:
> Vil du ikke hellere ha' en javascript gruppe så?
Det er jo det, client-side er til.
Et af problemerne med at diskutere ikke-standard syntaxer er som jeg
skriver, at man ikke kan bruge dem direkte. Derfor er de ikke til nogen
hjælp andet end lige dem, som bruger netop det framework. JS findes i
alle browsere i ren form, derfor vil diskussion af ren JS kunne bruges
af alle.
Frasmeworks er bygget på indbyggede sprog, derfor vil det være ulogisk
at sætte dem som hovedgruppe og JS som en undergruppe.
Med mindre man antager, at JS er det eneste tilbageværende indbyggede
sprog, og at f.eks. VBscript er dødt, for det er også client-side.
MVH
Rune Jensen
| |
Peter Farsinsen (27-01-2010)
| Kommentar Fra : Peter Farsinsen |
Dato : 27-01-10 15:27 |
|
Rune Jensen wrote:
>> Vil du ikke hellere ha' en javascript gruppe så?
>
> Det er jo det, client-side er til.
Måske - jeg synes ikke der er nogen hindringer i fundatsen for at den
også omhandler frameworks skrevet i javascript.
> Et af problemerne med at diskutere ikke-standard syntaxer er som jeg
> skriver, at man ikke kan bruge dem direkte. Derfor er de ikke til nogen
> hjælp andet end lige dem, som bruger netop det framework. JS findes i
> alle browsere i ren form, derfor vil diskussion af ren JS kunne bruges
> af alle.
Det er rigtigt, men der er typisk også mange forskellige løsninger på
cross browser-problemstillinger. Man skal jo også vælge, hvilken én af
de løsninger man vil benytte, hvis man altså ikke er typen der
insisterer på at genopfinde den dybe tallerken, hver gang man løber ind
i et problem.
> Frasmeworks er bygget på indbyggede sprog, derfor vil det være ulogisk
> at sætte dem som hovedgruppe og JS som en undergruppe.
Det var en joke...
- Peter
| |
Stig Johansen (28-01-2010)
| Kommentar Fra : Stig Johansen |
Dato : 28-01-10 02:46 |
|
Peter Farsinsen wrote:
> Det er rigtigt, men der er typisk også mange forskellige løsninger på
> cross browser-problemstillinger. Man skal jo også vælge, hvilken én af
> de løsninger man vil benytte, hvis man altså ikke er typen der
> insisterer på at genopfinde den dybe tallerken, hver gang man løber ind
> i et problem.
I det her tilfælde kan jeg nu ikke se nogen fordel i
frameworks/crossbrowser.
Det eneste OP har brug for er en document.getElementById,cloneNode og
insertAfter, så der er ikke tale om ret mange standard javascript linier.
Til gengæld vil man kunne se (forstå) hvad der sker.
--
Med venlig hilsen
Stig Johansen
| |
Danjel (27-01-2010)
| Kommentar Fra : Danjel |
Dato : 27-01-10 04:55 |
|
On 27 Jan., 11:36, Martin <m...@scandesigns.invalid> wrote:
> On 27-01-2010 11:11, Stig Johansen wrote:
>
> > Danjel wrote:
>
> > [snip en masse]
>
> > Det er nogle højst mystiske forslag du får præsenteret.
>
> > _Ingen_ clientside validering dúr, højst som en proaktiv validering(aka
> > tastefejl).
>
> > I dit eksempel er der _intet_ der forhindrer mig i at rette totalen til 5
> > kr.
>
> Nu tjekker man jo også altid (eller det håber jeg da stærkt at man gør)
> resultater serverside når formen indsendes.
Der bliver også checket serverside, men så langt er jeg ikke nået
endnu
Desuden havde jeg oprindeligt også lagt en "onchange" på totalerne,
således at hvis man forsøgte at rette, så blev de opdateret med nye
udregnede værdier.
Mit problem ligger stadig i udregningen, og i den forbindelse skal jeg
også have mulighed for "if ..."
Danjel
| |
Stig Johansen (27-01-2010)
| Kommentar Fra : Stig Johansen |
Dato : 27-01-10 15:18 |
|
Danjel wrote:
> Der bliver også checket serverside, men så langt er jeg ikke nået
> endnu
> Desuden havde jeg oprindeligt også lagt en "onchange" på totalerne,
> således at hvis man forsøgte at rette, så blev de opdateret med nye
> udregnede værdier.
>
> Mit problem ligger stadig i udregningen, og i den forbindelse skal jeg
> også have mulighed for "if ..."
if ... ?
Det er vel ikke særligt smart at clone nodes med samme værdi, så du ikke kan
skille dem ad.
Lav dem id'er som:
navn1,vari1,qty1,pris1
navn2,vari2,qty2,pris2
... osv
og iterér over navnene med
for (var i=1;i<'antal');i++) {
pris= pris + document.getElementById('qty'+i).value * 'noget'
.....
--
Med venlig hilsen
Stig Johansen
| |
N/A (27-01-2010)
| Kommentar Fra : N/A |
Dato : 27-01-10 13:29 |
|
| |
Danjel (02-02-2010)
| Kommentar Fra : Danjel |
Dato : 02-02-10 04:49 |
|
> Det er vel ikke særligt smart at clone nodes med samme værdi, så du ikke kan
> skille dem ad.
> Lav dem id'er som:
> navn1,vari1,qty1,pris1
> navn2,vari2,qty2,pris2
> .. osv
>
> og iterér over navnene med
> for (var i=1;i<'antal');i++) {
> pris= pris + document.getElementById('qty'+i).value * 'noget'
> ....
Jeg har følgende:
******************************''
<script type="text/javascript">
$(document).ready(function() {
$antal = $("input[name='biznames']")
$antal.removeAttr("onchange")
$antal.change(function () {
$firstName=$("input[name='navn1']").attr("name","name")
$tr = $firstName.parent().parent()
$("form tr").has("td input[name^='navn']").remove()
for(i=this.value; i>1; i--) {
$tr.clone().insertAfter($tr).find("input").first().attr
("name","navn"+i)
}
$firstName.attr("name","navn1")
})
});
</script>
***************************************
Det kan godt være at jeg ikke er den skarpeset kniv i skuffen, men jeg
har læst og læst, men kan stadig ikke få det til at virke.
Som det er nu, så har jeg fået udregningen til at virke indtil jeg
retter antal navne (biznames).
Jeg har på fornemmelsen at det er, som det også er blevet nævnt her,
fordi at jeg ikke har givet de andre felter numre.
Så vidt jeg kan se på koden, så bliver der dannet navn1, navn2 o.s.v.,
men ikke vari1, vari2, qty1, qty2, total1, total2 o.s.v.
Jeg kan godt til dels forstå de enkelte elementer, men hvordan det
hele hænger sammen er jeg ikke klog nok til.
Er der en af jer kloge der kan lave et eksempel/løsning hvor jeg får
navngivet/nummereret flere felter end bare "navn"?
En ting jeg også har opdaget er at jeg ikke kan fange data efter
formularen er blevet sendt med post, har været på google, men uden
held (igen....)
Undskyld mig og mine spørgsmål....
pft
danjel
| |
Danjel (17-03-2010)
| Kommentar Fra : Danjel |
Dato : 17-03-10 05:48 |
|
On 17 Mar., 11:28, Jens Peter Karlsen <jpkarl...@mvps.org> wrote:
> Parseint returnerer NaN hvis strengen ikke er et tal så brug
> isnan(parseInt(antal.value)) i stedet.
har prøvet:
if (isnan(parseInt(antal.value)) || (antal.value-0<1))
men scriptet kører ikke....
Har lagt "alert" bomber ind under tests.
Hverken det før eller efter "else" bliver kørt
Har lidt en tanke om at "antal.value" er skurken, men dette:
if (antal.value-0<1) {
virker jo....
Jeg er afgjort _ikke_ guru, så det er muligvis en banalitet.
pft
Danjel
>
> I øvrigt virker det lidt besynderligt at du først undersøger om value
> er mindre end 1 og først derefter checker om det overhovedet er et
> tal.
>
> Nu har jeg ikke resten af tråden her så kan ikke se hvad du prøver at
> opnå.
Scriptet gør det det skal, så det er vist ikke vigtigt, mit problem er
at scriptet ikke kører når jeg har flere betingelser.
>
> Regards Jens Peter Karlsen.
| |
Jens Peter Karlsen (17-03-2010)
| Kommentar Fra : Jens Peter Karlsen |
Dato : 17-03-10 15:59 |
|
Min fejl. brug isNaN i stedet.
Regards Jens Peter Karlsen.
On Wed, 17 Mar 2010 04:47:38 -0700 (PDT), Danjel <danjel@jungersen.dk>
wrote:
>har prøvet:
>if (isnan(parseInt(antal.value)) || (antal.value-0<1))
>men scriptet kører ikke....
| |
Jens Peter Karlsen (17-03-2010)
| Kommentar Fra : Jens Peter Karlsen |
Dato : 17-03-10 16:11 |
|
Jeg er stadig forundret over at du undersøger om value er et tal eller
det er et tal under 1. Det giver ikke rigtig mening.
Hvis det er et tal (uanset hvilket) bliver det udført efter isNaN
check og andet check udføres aldrig.
At bytte om på checks vil ikke ændre på noget.
Er du sikker på at du ikke ville bruge && i stedet for || (betyder
eller) så begge checks udføres?
Regards Jens Peter Karlsen.
On Wed, 17 Mar 2010 04:47:38 -0700 (PDT), Danjel <danjel@jungersen.dk>
wrote:
>if (isnan(parseInt(antal.value)) || (antal.value-0<1))
| |
Danjel (02-02-2010)
| Kommentar Fra : Danjel |
Dato : 02-02-10 23:56 |
|
Har fået data med over med POST....
Har installeret firebug, og fået bekræftet at felterne ikke bliver
nummereret, bortset fra "navn"...
Beregningerne _tror_ jeg at jeg kan få styr på, hvis jeg får
nummereringen til at virke.
/Danjel
| |
Stig Johansen (03-02-2010)
| Kommentar Fra : Stig Johansen |
Dato : 03-02-10 09:27 |
|
"Danjel" <danjel@jungersen.dk> wrote in message
news:b14ecdfc-2fbd-41b8-98ea-ba44987b5c09@h2g2000yqj.googlegroups.com...
>Har installeret firebug, og fået bekræftet at felterne ikke bliver
>nummereret, bortset fra "navn"...
DOM inspector kan også fortælle dig det.
>Beregningerne _tror_ jeg at jeg kan få styr på, hvis jeg får
>nummereringen til at virke.
Der er ikke så meget hokus-pokus i det, du skal blot sørge for, at de
underliggende nodes bliver tildelt en fortløbende nummerrække/id (når du
deepkloner dem).
I øvrigt er dit koncept ikke pissesmart - prøv f.eks.
Indtast oplysninger i 'linie 1'.
Hovsa, jeg skulle bruge 3 - ret antallet til 3.
Indtast oplysninger i linie 2, og -
Hovsa, jeg skulle kun bruge 2 i stedet for 3.
Hvad sker der med data når man retter antallet (op og ned)?
--
Med venlig hilsen/Best regards
Stig Johansen
| |
Danjel (17-03-2010)
| Kommentar Fra : Danjel |
Dato : 17-03-10 16:43 |
|
On Mar 17, 4:11 pm, Jens Peter Karlsen <jpkarl...@mvps.org> wrote:
> Jeg er stadig forundret over at du undersøger om value er et tal eller
> det er et tal under 1. Det giver ikke rigtig mening.
> Hvis det er et tal (uanset hvilket) bliver det udført efter isNaN
> check og andet check udføres aldrig.
> At bytte om på checks vil ikke ændre på noget.
> Er du sikker på at du ikke ville bruge && i stedet for || (betyder
> eller) så begge checks udføres?
>
> Regards Jens Peter Karlsen.
>
> On Wed, 17 Mar 2010 04:47:38 -0700 (PDT), Danjel <dan...@jungersen.dk>
> wrote:
>
> >if (isnan(parseInt(antal.value)) || (antal.value-0<1))
Den der virker:
if (isNaN(parseInt(antal.value)) || (antal.value-0<1)) {
Den skal fange "noget" der ikke er et tal, eller et gyldigt tal under
"1"
Tak for hjælpen....
/Danjel
| |
Danjel (03-02-2010)
| Kommentar Fra : Danjel |
Dato : 03-02-10 06:28 |
|
> >Beregningerne _tror_ jeg at jeg kan få styr på, hvis jeg får
> >nummereringen til at virke.
>
> Der er ikke så meget hokus-pokus i det, du skal blot sørge for, at de
> underliggende nodes bliver tildelt en fortløbende nummerrække/id (når du
> deepkloner dem).
Det er præcist den del jeg ikke har styr på
>
> I øvrigt er dit koncept ikke pissesmart - prøv f.eks.
> Indtast oplysninger i 'linie 1'.
> Hovsa, jeg skulle bruge 3 - ret antallet til 3.
> Indtast oplysninger i linie 2, og -
> Hovsa, jeg skulle kun bruge 2 i stedet for 3.
>
> Hvad sker der med data når man retter antallet (op og ned)?
Jeg ved det, men jeg håber på at jeg kan løse det senere, har fundet
en stump som skulle gøre at den kan huske det...
Men jeg er selvfølgelig altid åben for andre muligheder, forslag ??
/Danjel
| |
Stig Johansen (03-02-2010)
| Kommentar Fra : Stig Johansen |
Dato : 03-02-10 22:23 |
|
Danjel wrote:
>> >Beregningerne _tror_ jeg at jeg kan få styr på, hvis jeg får
>> >nummereringen til at virke.
>>
>> Der er ikke så meget hokus-pokus i det, du skal blot sørge for, at de
>> underliggende nodes bliver tildelt en fortløbende nummerrække/id (når du
>> deepkloner dem).
> Det er præcist den del jeg ikke har styr på
Jeg ved ikke hvordan man kan lave det med jquery, men her er et forslag til
princip.
I din tabel laver du 1. række som:
<tr id="firstrow"><td><input id="navn1" name="navn1">..<td><input
id="vari1" name="vari1">..<td><input id="qty1" name="qty1">..<td><input
id="total1" name="total1">..
Jeg har ikke skrevet det fuldt ud, men hvis du sørger for der ikke er
mellemrum/linieskift mellem <tr> og <td>, så ved vi, at der er præcis 4
childnodes.
Så laver du et loop med indsættelse af nodes a la:
var newnode;
var firstrow=document.getElementById('firstrow');
var nextrow=firstrow.nextSibling;
var antal=document.getElementById('din_id_på_antal').value ;
for (var i=2; i<antal;i++) {
newnode = firstrow.cloneNode(true);
newnode.id = 'firstrow'+i ;
newnode.chileNodes(0).chileNodes(0).id='navn'+i ;
newnode.chileNodes(0).chileNodes(0).name='navn'+i ;
newnode.chileNodes(1).chileNodes(0).id='vari'+i ;
newnode.chileNodes(1).chileNodes(0).name='vari'+i ;
... osv
firstrow.parentNode.insertBefore(nextrow);
}
Nu har jeg skrevet id'er på alle elementerne, men det behøver du nok ikke,
blot dem du skal have fat i til beregning.
Når du skal regne på dem kan du nu bruge et loop
var total=0;
var qty ;
for (var i=1;i<antal;i++) {
qty=document.getElementById('qty'+i).value ;
total = total + qty*etellerandet ;
document.getElementById('total'+i).value = qty*etellerandet ;
}
> Jeg ved det, men jeg håber på at jeg kan løse det senere, har fundet
> en stump som skulle gøre at den kan huske det...
> Men jeg er selvfølgelig altid åben for andre muligheder, forslag ??
Jeg vil nok foreslå du sætter antal til disabled når der er valgt antal.
Så undgår man rod med at fjerne/tilføje mere end een gang.
--
Med venlig hilsen
Stig Johansen
| |
Danjel (11-02-2010)
| Kommentar Fra : Danjel |
Dato : 11-02-10 02:52 |
|
Er noget et pænt stykke (synes jeg selv), med meget stor hjælp fra jer
og "serverside.php".
Har flækket en lille en sammen:
************************
function calcbizcard()
{
// Fee (hanfee) if order amount is below xx (minamt)
hanfee = 75;
minamt = 1500;
// Fetch values from dropdown script
Prc = document.ordre.prflg.value;
Prcstart = document.ordre.prstart.value;
// Initialize values
Qty1 = 0; Qty2 = 0; Qty3 = 0;
Tot1 = 0; Tot2 = 0; Tot3 = 0;
// Set values from fields
if (document.ordre.qty1.value > "")
{ Qty1 = document.ordre.qty1.value };
document.ordre.qty1.value = eval(Qty1);
Tot1 = Qty1 * Prc;
document.ordre.total1.value = dm(eval(Tot1));
if (document.ordre.qty2.value > "")
{ Qty2 = document.ordre.qty2.value };
document.ordre.qty2.value = eval(Qty2);
Tot2 = Qty2 * Prc;
document.ordre.total2.value = dm(eval(Tot2));
// Add start fee (Prcstart)
Totamt = eval(Tot1) + eval(Tot2) + eval(Prcstart);
// Set handling fee to zero so that it can be showed correctly to the
user
if (Totamt >= minamt)
{ hanfee = 0 };
// If amount is too small, add handling fee
if (Totamt < minamt)
{ Totamt = Totamt + hanfee };
// Change form fields to reflect new values
document.ordre.showstart.value = dm(eval(Prcstart));
document.ordre.HanFee.value = dm(eval(hanfee));
document.ordre.GrandTotal.value = dm(eval(Totamt));
}
</script>
***********************************
Den virker som den skal, men selvfølgelig _kun_ når der er 2 linier.
Derfor har jeg forsøgt rette til således at den tager alle linier.
Antallet af linier kan læses i feltet "biznames"
Det har jeg fået til nedenstående:
***********************************
function calcbizcard()
{
// Fee (hanfee) if order amount is below xx (minamt)
hanfee = 75;
minamt = 1500;
// Fetch values from dropdown script
var Prc = document.ordre.prflg.value;
var Prcstart = document.ordre.prstart.value;
var biznames = document.ordre.biznames.value;
var Totamt=0;
var qty;
for (var a=1;a<=biznames;a++) {
qty=document.ordre.'qty'+a.value ;
linetotal=qty*Prc;
Totamt=Totamt+linetotal ;
document.ordre.total+a.value = linetotal;
}
// Add startfee
Totamt=Totamt+Prcstart;
// Set handling fee to zero so that it can be showed correctly to the
user
if (Totamt >= minamt)
{ hanfee = 0 };
// If amount is too small, add handling fee
if (Totamt < minamt)
{ Totamt = Totamt + hanfee };
// Change form fields to reflect new values
document.ordre.showstart.value = dm(eval(Prcstart));
document.ordre.HanFee.value = dm(eval(hanfee));
document.ordre.GrandTotal.value = dm(eval(Totamt));
}
</script>
*********************************
Men det virker ikke, nogle ideer?
Jeg er som sagt ret grøn på scriptområdet, så det er muligvis bare
noget banalt...
pft
/Danjel
| |
Stig Johansen (11-02-2010)
| Kommentar Fra : Stig Johansen |
Dato : 11-02-10 11:06 |
|
Danjel wrote:
> Men det virker ikke, nogle ideer?
På et tidspunkt i nat skulle jeg op, og katten ville have mad, så jeg
opdaterede faktisk dit eksempel med dine egne prisberegninger:
< http://w-o-p-r.dk/test/bestil-bizcard.php.html>
(og lidt højrejusterning til tal m.v.)
--
Med venlig hilsen
Stig Johansen
| |
Anders Wegge Keller (11-02-2010)
| Kommentar Fra : Anders Wegge Keller |
Dato : 11-02-10 11:05 |
|
Danjel <danjel@jungersen.dk> writes:
> Jeg er som sagt ret grøn på scriptområdet, så det er muligvis bare
> noget banalt...
Har du et link til en side hvor man kan se det?
--
/Wegge
Leder efter redundant peering af dk.*,linux.debian.*
| |
Danjel (11-02-2010)
| Kommentar Fra : Danjel |
Dato : 11-02-10 04:33 |
|
On 11 Feb., 11:05, Anders Wegge Keller <we...@wegge.dk> wrote:
> Danjel <dan...@jungersen.dk> writes:
> > Jeg er som sagt ret grøn på scriptområdet, så det er muligvis bare
> > noget banalt...
>
> Har du et link til en side hvor man kan se det?
selvfølgelig:
http://www.printlight.dk/bestil-bizcard-jq.php
og
http://www.printlight.dk/bestil-bizcard.php
Den første er den løsning som jeg er kommet længst med, anden løsning
har nogle andre problemer som jeg ikke ved hvordan jeg skal løse...
/Danjel
| |
Danjel (11-02-2010)
| Kommentar Fra : Danjel |
Dato : 11-02-10 04:38 |
|
On 11 Feb., 11:05, Stig Johansen <wopr...@gmail.com> wrote:
> Danjel wrote:
> > Men det virker ikke, nogle ideer?
>
> På et tidspunkt i nat skulle jeg op, og katten ville have mad, så jeg
> opdaterede faktisk dit eksempel med dine egne prisberegninger:
> < http://w-o-p-r.dk/test/bestil-bizcard.php.html>
> (og lidt højrejusterning til tal m.v.)
Er de ikke skønne de små
Det ser rigtig super ud, henter den værdierne fra mine dropdowns??
Det synes jeg umiddelbart at det ser ud til.
/Danjel
| |
Stig Johansen (11-02-2010)
| Kommentar Fra : Stig Johansen |
Dato : 11-02-10 13:10 |
| | |
Danjel (11-02-2010)
| Kommentar Fra : Danjel |
Dato : 11-02-10 13:52 |
|
Jeg står allerede i dyb gæld til jer gutter.
Men jeg har stadig 2 ting jeg vil spørge efter.
Først og fremmest vil jeg jo gerne lære af det, så jeg vil spørge om
lidt forklaring.
Jeg har selv forsøgt at forstå det, og har kommenteret det jeg kan,
vil i hjælpe med resten ?
Den sidste ting jeg vil spørge efter er om jeg må lægge koden på min
hjemmeside?
Formålet med siden er at hjælpe andre ligesindede.
Siden er ikke oppe at køre endnu, men den kommer på danjel.dk
Koden som den ser ud på min hjemmeside:
Den første fattede jeg ikke meget af
***************************
<script type="text/javascript">
// ****** clonelines ******
// Clone lines - for use in bizcard-section
var prevantal = 1 ;
function clonelines(antal) {
if (antal.value-0<1) return ;
var firstrow=document.getElementById('firstrow');
if (antal.value-0 < prevantal ) {
for (var i =(antal.value-0)+1;i<=prevantal; i++) {
firstrow.parentNode.removeChild(document.getElementById('firstrow'+i));
}
prevantal=antal.value-0;
return ;
}
var newnode;
var nextrow=document.getElementById('nextrow');
for (var i=prevantal+1; i<=antal.value;i++) {
newnode = firstrow.cloneNode(true);
newnode.id = 'firstrow'+i ;
for (var c=0;c<4;c++)
{ newnode.childNodes[c].childNodes[0].value='';}
newnode.childNodes[0].childNodes[0].name='navn'+i ;
newnode.childNodes[1].childNodes[0].name='vari'+i ;
newnode.childNodes[2].childNodes[0].id='qty'+i ;
newnode.childNodes[2].childNodes[0].name='qty'+i ;
newnode.childNodes[3].childNodes[0].id='pris'+i ;
newnode.childNodes[3].childNodes[0].name='pris'+i ;
firstrow.parentNode.insertBefore(newnode,nextrow);
}
prevantal=antal.value-0;
// antal.setAttribute('disabled','disabled');
}
</script>
***************************
koden for beregning:
***************************
<script type="text/javascript">
// ********* Calculate price for businesscards ***********
function calcbizcard()
{
// Get values from dropdowns, and set rest of vars
var prisprstk = document.getElementById('prflg').value - 0;
Prcstart = document.getElementById('prstart').value ;
var minamt = 1500.0;
var hanfee = 75;
var antal=document.getElementById('antal').value - 0 ;
var pristot=0 ;
var qty ;
// Calculate the totals (pristot) and the subtotal for each line
('pris'+a)
for (var a=1;a<=antal;a++) {
qty=document.getElementById('qty'+a).value - 0 ;
pristot=pristot+qty*prisprstk ;
document.getElementById('pris'+a).value = dm(qty*prisprstk) ;
}
// Add startfee
pristot = pristot + (Prcstart-0) ;
document.getElementById('showstart').value = dm(Prcstart) ;
// If total amount is too small (less than minamt), add handling fee
(hanfee)
if (pristot < minamt) {
pristot = pristot + (hanfee-0) ;
document.getElementById('hanfee').value = dm(hanfee);
} else {
document.getElementById('hanfee').value = dm(0);
}
// Tranfer total (pristot) to formfield.
// Also make sure that the price is with 2 decimal
document.getElementById('pristot').value = dm(pristot) ;
}
</script>
*********************
De venligste (og meget taknemmelige) hilsener
Danjel
PS: Hvis der er noget jeg kan gøre for jer, må i endelig sige til.
Jeg ved at mennesker som jer svarer på disse ting for at hjælpe, jeg
gør det selv om andre emner, men hvis i er i nærheden af mig, så kom
endelig indenfor, så kan jeg i det mindste byde på en lille en, en
plakat af børnene, katten, en stak visitkort ???
| |
Stig Johansen (12-02-2010)
| Kommentar Fra : Stig Johansen |
Dato : 12-02-10 05:02 |
|
Danjel wrote:
> Jeg har selv forsøgt at forstå det, og har kommenteret det jeg kan,
> vil i hjælpe med resten ?
Man kan prøve.
> Den sidste ting jeg vil spørge efter er om jeg må lægge koden på min
> hjemmeside?
Det kode jeg laver er til fri afbenyttelse.
> Den første fattede jeg ikke meget af
Først en overordnet forklaring.
Din tabel består af et antal rækker (<tr>), hvor vi skal have identificeret
den række, der skal gentages/kopieres.
Den har jeg kaldt 'firstrow', men den kan kaldes hvad som helst.
Javascript har ingen insertafter, men kun en insertbefore, så vi skal vide
hvor vi skal indsætte rækkerne (before), og den række(<tr>), har jeg kaldt
'nextrow'.
Vi ved nu vi skal kopiere 'firstrow' et antal gange, og indsætte dem
umiddelbart inden 'nextrow', dog med ændrede navne/id'er (nummerering).
Da vi også skal have mulighed for at fjerne et antal rækker, bliver disse
nye rækker navngivet 'firstrow2','firstrow3' osv.
Ud fra det er lidt kommentering af koden (kommentarer står efter koden).
> var prevantal = 1 ;
Denne indeholder tidligere antal rækker, og startes om med 1.
> if (antal.value-0<1) return ;
Hvis vi har angivet mindre end 1, gør vi ikke noget.
(Det med at trække 0 fra er blot for at tvinge typen over i tal i stedet for
streng).
> var firstrow=document.getElementById('firstrow');
Her henter vi 'firstrow'.
Og tjekker på om det nye antal er mindre end det nuværende.
> if (antal.value-0 < prevantal ) {
> for (var i =(antal.value-0)+1;i<=prevantal; i++) {
Her looper vi over numrene i forhold til antal, og hvis man havde 4, og
skriver 2, vil i blive 3 og 4.
>
> firstrow.parentNode.removeChild(document.getElementById('firstrow'+i));
Her fjerner vi den pågældende rækker (firstrow+i) dvs. firstrow3 og
firstrow4.
> }
> prevantal=antal.value-0;
> return ;
Gemmer det nye antal, og afslutter funktionen.
> }
Kommer vi herned, er der tale om tilføjelse af rækker.
> var newnode;
Arbejdsvariabel til den nye række.
> var nextrow=document.getElementById('nextrow');
nextrow er den række, der skal bruges til at fortælle hvor den nye række
skal indsættes før (firstrow har vi fra tidligere).
> for (var i=prevantal+1; i<=antal.value;i++) {
> newnode = firstrow.cloneNode(true);
Der deepkloner vi, dvs. tager en kopi af 'firstrow' incl alt indhold, så i
princippet kan du betragte newnode som
<tr id="firstrow"><td><input name="navn1"></td>... osv,
altså det, der står mellem <tr> og </tr>
> newnode.id = 'firstrow'+i ;
Da vi skal kunne finde dem til senere sletning, får de en fortløbende id, så
vores nye node hedder nu eks. <tr id="firstrow3"><td.. osv
> for (var c=0;c<4;c++)
> { newnode.childNodes[c].childNodes[0].value='';}
Vi ved fra HTML'et, at der er præcis 4 childnodes(børn), som hver er
<td></td>, samtidig ved vi at hver af disse childnodes består af en
childnode (<input>).
Disse ting er nummereret fra 0, og hedder 0,1,2,3 og ikke 1,2,3,4.
Så dette loop nulstiller value i <input>, så det varer til <input
value=""...
> newnode.childNodes[0].childNodes[0].name='navn'+i ;
> newnode.childNodes[1].childNodes[0].name='vari'+i ;
> newnode.childNodes[2].childNodes[0].id='qty'+i ;
> newnode.childNodes[2].childNodes[0].name='qty'+i ;
> newnode.childNodes[3].childNodes[0].id='pris'+i ;
> newnode.childNodes[3].childNodes[0].name='pris'+i ;
childNodes[0],childNodes[1],childNodes[2],childNodes[3] er <td>' erne med
<input> felterne, og <input> er en child af <td>, dermed .childNodes[0].
De bliver tildelt de respektive name= og id=
> firstrow.parentNode.insertBefore(newnode,nextrow);
Her beder vi om at indsætte vores nye <tr> umiddelbart før 'nextrow'.
> }
> prevantal=antal.value-0;
Gemmer det nuværende antal til senere brug.
> // antal.setAttribute('disabled','disabled');
Det var hvis du ville disable antal efter en ændring, men den kan fjernes.
> koden for beregning:
Den har du vist styr på, så den undlader jeg at kommentere.
--
Med venlig hilsen
Stig Johansen
| |
Danjel (17-03-2010)
| Kommentar Fra : Danjel |
Dato : 17-03-10 02:47 |
|
Det er supergodt!!
Der er en enkelt udfordring tilbage.
Den brækker sig hvis man f.eks. indtaster "kljhdsaf" eller "a", altså
alt andet end tal.
Derfor har jeg forsøgt mig med:
if (antal.value-0<1) {
// if (antal.value-0<1 || !parseInt(antal.value)) {
alert("Indtast venligt et tal, mindst 1");
return ;
} else {
resten af script....
}
Den første linie virker, men fanger kun forkerte tal.
Anden linie (den udkommenterede), får scriptet til at stoppe med at
virke.
Hvad gør jeg galt ??
Danjel
| |
Jens Peter Karlsen (17-03-2010)
| Kommentar Fra : Jens Peter Karlsen |
Dato : 17-03-10 11:29 |
|
Parseint returnerer NaN hvis strengen ikke er et tal så brug
isnan(parseInt(antal.value)) i stedet.
I øvrigt virker det lidt besynderligt at du først undersøger om value
er mindre end 1 og først derefter checker om det overhovedet er et
tal.
Nu har jeg ikke resten af tråden her så kan ikke se hvad du prøver at
opnå.
Regards Jens Peter Karlsen.
On Wed, 17 Mar 2010 01:46:47 -0700 (PDT), Danjel <danjel@jungersen.dk>
wrote:
>Den brækker sig hvis man f.eks. indtaster "kljhdsaf" eller "a", altså
>alt andet end tal.
>
>Derfor har jeg forsøgt mig med:
> if (antal.value-0<1) {
>// if (antal.value-0<1 || !parseInt(antal.value)) {
| |
|
|