/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Regnestykke
Fra : Catrina Kristensen


Dato : 27-02-04 19:57

Hej, jeg vil gerne lave et script i min formmail, hvor gæsten
indtaster antal ønskede eksemplarer af en vare. Hvis antallet er
1, skal værdien 4800 returneres i et efterfølgende felt. Hvis
værdien er højere end 1, skal værdien 4800+(antal-1)*500
returneres i feltet nedenunder.

Jeg har forsøgt med følgende kode, men det virker ikke:

<td>Number of copies:</td>
<td><input type="text" size="3" name="antal"
onchange="this.form.amount.value =
(this.value.match(/^[1-9]\d*$/)) ? 4800 + (parseInt(this.value,
10) - 1) * 500 : '';" /></td>
               
<td>Your price (DKK):</td>
<td><input type="text" name="amount" readonly="readonly" /> </td>

Er der nogen, der kan hjælpe?

MVH Catrina

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Per Thomsen (29-02-2004)
Kommentar
Fra : Per Thomsen


Dato : 29-02-04 10:48

Catrina Kristensen wrote:
> <td>Number of copies:</td>
> <td><input type="text" size="3" name="antal"
> onchange="this.form.amount.value =
> (this.value.match(/^[1-9]\d*$/)) ? 4800 + (parseInt(this.value,
> 10) - 1) * 500 : '';" /></td>
>                
> <td>Your price (DKK):</td>
> <td><input type="text" name="amount" readonly="readonly" /> </td>

Jeg ville nok starte med at ligge det ud i en funktion i headeren:
<script type="text/javascript" language="javascript">

function antal2amount( ) {
// Dette er selvfølgelig antaget at det er den første
// form på siden. Du kan også give formularen et navn og så
// tilgå den med 'navn'.
var objAntal = document.forms[0].elements['antal'];
var objAmount = document.forms[0].elements['amount'];

var intAntal = parseInt( objAntal.value, 10 );
if( !isNaN(intAntal) ) {
var intAmount = null;
if( intAntal==1) {
intAmount = 4800;
} else {
intAmount = 4800+(intAntal-1)*500;
}
objAmount.value = intAmount;
}

}
</script>

Så ville jeg kalde den på onchange handleren.

<input bla.bla.bla. onchange="antal2amount();" />

Hvis du vil insisistere på at gøre det inline, tror jeg måske du skal
prøve med:
onchange="this.form.amount.value = ( (parseInt(this.value,10)==1) ?
'4800' : ''+(4800 + ( (parseInt(this.value,10)-1) * 500 ) ) )" />

hvis det ikke bedre, kan du jo spørge igen, men så forklar venligst hvad
det er der går galt. (Giver det et forkert resultat? kommer der ingen
tal i amount? Melder browseren fejl?).

MVH Per Thomsen,
http://www.pert.dk/

Lasse Reichstein Nie~ (29-02-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 29-02-04 14:08

Per Thomsen <pert@pert.dk> writes:

> Jeg ville nok starte med at ligge det ud i en funktion i headeren:
> <script type="text/javascript" language="javascript">

Du kan roligt droppe language-attributten. Den er deprecated i HTML 4,
og findes ikke I andre versioner af HTML. Man kan altid nøjes med
type-attributten, som er påkævet i HTML 4 (og heller ikke findes i
andre versioner).

> var intAmount = null;

Du er egentlig Java-programmør, right?
(Jeg ville normalt ikke initialisere variablen, fordi den intielle
værdi (undefined) er lige så god en markør for at noget ikke blev
tildelt en værdi som null er).

> Så ville jeg kalde den på onchange handleren.
>
> <input bla.bla.bla. onchange="antal2amount();" />

Man kan spare lidt skrivning ved at sende formen med her:
onsubmit="antal2amount(this.form);"
Så slipper man for at slå den op i funktionen med "document.forms[0]",
og det bliver ved med at virke hvis man indsætter en form før, så
denne form ikke længere er nummer 0.

> Hvis du vil insisistere på at gøre det inline, tror jeg måske du skal
> prøve med:
> onchange="this.form.amount.value = ( (parseInt(this.value,10)==1) ?
> '4800' : ''+(4800 + ( (parseInt(this.value,10)-1) * 500 ) ) )" />

(Her var grunden til at jeg gætter på Java-programmør, eller et andet
statisk typet sprog: Man behøver ikke at lave værdien om til en streng
før man tildeler den til .value - den vil automatisk blive lavet om).

Ellers er jeg helt enig.
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Catrina Kristensen (05-03-2004)
Kommentar
Fra : Catrina Kristensen


Dato : 05-03-04 20:33

Per Thomsen wrote in dk.edb.internet.webdesign.clientside:
> Catrina Kristensen wrote:
> > <td>Number of copies:</td>
> > <td><input type="text" size="3" name="antal"
> > onchange="this.form.amount.value =
> > (this.value.match(/^[1-9]\d*$/)) ? 4800 + (parseInt(this.value,
> > 10) - 1) * 500 : '';" /></td>
> >                
> > <td>Your price (DKK):</td>
> > <td><input type="text" name="amount" readonly="readonly" /> </td>
>
> Jeg ville nok starte med at ligge det ud i en funktion i headeren:
> <script type="text/javascript" language="javascript">
>
> function antal2amount( ) {
> // Dette er selvfølgelig antaget at det er den første
> // form på siden. Du kan også give formularen et navn og så
> // tilgå den med 'navn'.
> var objAntal = document.forms[0].elements['antal'];
> var objAmount = document.forms[0].elements['amount'];
>
> var intAntal = parseInt( objAntal.value, 10 );
> if( !isNaN(intAntal) ) {
> var intAmount = null;
> if( intAntal==1) {
> intAmount = 4800;
> } else {
> intAmount = 4800+(intAntal-1)*500;
> }
> objAmount.value = intAmount;
> }
>
> }
> </script>
>
> Så ville jeg kalde den på onchange handleren.
>
> <input bla.bla.bla. onchange="antal2amount();" />
>
> Hvis du vil insisistere på at gøre det inline, tror jeg måske du skal
> prøve med:
> onchange="this.form.amount.value = ( (parseInt(this.value,10)==1) ?
> '4800' : ''+(4800 + ( (parseInt(this.value,10)-1) * 500 ) ) )" />
>
> hvis det ikke bedre, kan du jo spørge igen, men så forklar venligst hvad
> det er der går galt. (Giver det et forkert resultat? kommer der ingen
> tal i amount? Melder browseren fejl?).
>
> MVH Per Thomsen,
> http://www.pert.dk/

Mange tak for svar, men det virker stadig ikke - der returneres ingenting i
amount feltet, når jeg indtaster en værdi i antal feltet.

Jeg skriver lige mine koder:
<head>
<script type="text/javascript">

function GoSetAmountValues() {
var objAntal = document.forms[0].elements['antal'];
var objAmount = document.forms[0].elements['amount'];
var intAntal = parseInt( objAntal.value, 10 );
if( !isNaN(intAntal) ) {
var intAmount = null;
if( intAntal==1) {
intAmount = 4800;
} else {
intAmount = 4800+(intAntal-1)*500;
}
objAmount.value = intAmount;
}

}
</script>
</head>
<body>
<form>
<input name='antal' onchange="javascript:GoSetAmountValues();"></td>
<input name='amount' readonly="readonly">
</form>
</body>

Hvad er det, jeg har misforstået her?


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Per Thomsen (07-03-2004)
Kommentar
Fra : Per Thomsen


Dato : 07-03-04 18:08

Catrina Kristensen wrote:
> Per Thomsen wrote in dk.edb.internet.webdesign.clientside:
[klip]
>
>><input bla.bla.bla. onchange="antal2amount();" />
[klip]
> <body>
> <form>
> <input name='antal' onchange="javascript:GoSetAmountValues();"></td>
> <input name='amount' readonly="readonly">
> </form>
> </body>
>
> Hvad er det, jeg har misforstået her?
>

Du skal ikke skrive "javascript:" foran i en event-handler. Der skal
bare stå sådan her:
   
<form>
<input name='antal' onchange="GoSetAmountValues();"></td>
<input name='amount' readonly="readonly">
</form>

MVH Per Thomsen,
http://www.pert.dk/


Claus Marcussen (01-03-2004)
Kommentar
Fra : Claus Marcussen


Dato : 01-03-04 07:57

Catrina Kristensen wrote in dk.edb.internet.webdesign.clientside:
> Hej, jeg vil gerne lave et script i min formmail, hvor gæsten
> indtaster antal ønskede eksemplarer af en vare. Hvis antallet er
> 1, skal værdien 4800 returneres i et efterfølgende felt. Hvis
> værdien er højere end 1, skal værdien 4800+(antal-1)*500
> returneres i feltet nedenunder.

Her kom matematikeren lige op i mig.

Da formlen 4800+(antal-1)*500 jo virker for 1 også, så er der jo
ingen grund til If statement. Reduceret udtryk, som giver det
rigtige resultat for alle værdier:

4300 + antal * 500

mvh Claus Marcussen

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste