webForumDet fria alternativet

text beroende på select & option

7 svar · 209 visningar · startad av tlee

tleeMedlem sedan mars 2001290 inlägg
#1

Tjena..

Jag har en sida som genereras ur en databas.

Den ser ut såhär.


<script lanugage=javascript>
<!--
function Calc(iMax){
var iResult=0
for(var i=1; i<=iMax; i++){
var selValue=eval("document.f_Conf.sel"+i+".options[document.f_Conf.sel"+i+".selectedIndex].value")
var prize=parseFloat(selValue.split(":"));
if(isNaN(prize)){ prize=0; }
iResult+=prize
}
document.f_Conf.txtResult.value = iResult;
}
-->
</script>
<form method=post action=show_conf.asp name=f_Conf>
<table border=0 cellpadding=2 cellspacing=2 width=600>
<tr vAlign=top>
<TD><TABLE border=1 cellpadding=5 cellspacing=0><TR>
<TD>Grundsystem, vpu, minne..</TD>
</TR>
<TR><TD>
<SELECT NAME=sel1 onChange=javascript:Calc('2');>
<OPTION SELECTED VALUE=>Välj CPU.</OPTION>
<OPTION VALUE=1240:CP766>Cpu Celeron 766MHz 128K</OPTION>
<OPTION VALUE=1500:CP800>Cpu Celeron 800MHz 128K</OPTION>
</SELECT>
</TD></TR>
<TR><TD>
<SELECT NAME=sel2 onChange=javascript:Calc('2');>
<OPTION SELECTED VALUE=>Välj Minne</OPTION>
<OPTION VALUE=1560:1283E>Dimm PC133 128Mb ECC 168p</OPTION>
<OPTION VALUE=495:128P4>Dimm PC133 128Mb 3,3v168p</OPTION>
<OPTION VALUE=1510:128PE>Dimm PC100 128Mb ECC 168p</OPTION>
</SELECT>
</TD></TR>
</TABLE></TD>
</TR>
</TABLE>
<table border=0 cellpadding=0 cellspacing=0 width=600>
<tr>
<td width=300>Nettopris för ovanstående konfiguration är:</td><td> <input type=text name=txtResult> <i> (exkl moms)</i>&nbsp;</td>
</tr>
<TR>
<td width=300>Artikelnummer för ovanstående konfiguration är:</td><td> <input type=text name=txtArticleNr>&nbsp;</td>
</tr>
</table>
</FORM>

Vad som sker är att document.f_Conf.txtResult visar pris beroende på vilka val jag väljer i de olika droplistorna.

Jag behöver ytterligare en funktion som ni kanske kan hjälpa till med..

document.f_Conf.txtArticleNr skall genereras och visa ett artikelnummer beroende på vilka val man gör.

Värdet i textfältet skall vara uppdelat på följande vis.

[X][X] ... osv osv
[] <-- detta motsvarar vilken <select> värdet tillhör
X <-- detta motsvarar vilken <option> som är vald i <select>

Om jag använder ovan kod som exempen så skall den alltså visa 2 siffor eftersom det finns 2 <select>.
Den första siffran kan vara antingen en etta eller tvåa eftersom det bara finns två <option> i document.f_Conf.sel1
Den andra siffran kan vara en etta,tvåa eller trea eftersom det finns 3 st <option> i den document.f_Conf.sel2

Om document.f_Conf.txtArticleNr innehåller '11' betyder det alltså att jag har valt en 'CPU Celeron 766 Mhz 128K' i den första droplistan(sel1)
och att jag valt 'Dimm PC133 128 MB EXX 168p' i den andra droplistan(sel2)

Är ni med på vad jag menar?

/t

tleeMedlem sedan mars 2001290 inlägg
#2

Jag kanske förklarar dåligt..

När sidan laddas innehåller document.f_Conf.txtArticleNr värdet '00', detta värde
baseras på antalet <select> det finns i formuläret, nämnligen 2.

Om jag sedan väljer "CPU Celeron 766 Mhz 128K' i den första <select>:en så skall värdet i document.f_Conf.txtArticleNr
ändras till '10', varför?, Jo eftersom document.f_Conf.sel1 har ändrats från 'Välj CPU' till 'Cpu Celeron 766MHz 128K', vilket är det första valet i den <select>en..

Om jag sedan ändrar document.f_Conf.sel2 till 'Dimm PC100 128Mb ECC 168p' så skall document.f_Conf.txtArticleNr ändras
till '13' eftersom det är den tredje <option>:en i den andra <selecten>..

Är ni med nu då ?

/t

------------------
the man with the golden bottle..

JojoxxMedlem sedan juni 20004 308 inlägg
#3

Jadå... det går ju bra upp till 9 produkter / droplista :) annars är det iofs bara att sätta avgränsare mellan värdena.

function Calc(iMax){
var iResult=0
for(var i=1; i<=iMax; i++){
var selValue=eval("document.f_Conf.sel"+i+".options[document.f_Conf.sel"+i+".selectedIndex].value")
var prize=parseFloat(selValue.split(":"));
if(isNaN(prize)){ prize=0; }
iResult+=prize
}
document.f_Conf.txtResult.value = iResult;
document.f_Conf.txtArticleNr.value = ""+document.f_Conf.sel1.selectedIndex + document.f_Conf.sel2.selectedIndex;
}

------------------
/ J

tleeMedlem sedan mars 2001290 inlägg
#4

snyggt..:)

en sista grej bara :)

<script lanugage=javascript>
<!--
function Calc(iMax){
var iResult=0
for(var i=1; i<=iMax; i++){
var selValue=eval("document.f_Conf.sel"+i+".options[document.f_Conf.sel"+i+".selectedIndex].value")
var prize=parseFloat(selValue.split(":"));
if(isNaN(prize)){ prize=0; }
iResult+=prize
}
document.f_Conf.txtResult.value = iResult;
document.f_Conf.txtArticleNr.value = ""+document.f_Conf.sel1.selectedIndex + document.f_Conf.sel2.selectedIndex;

}
-->
</script>

kan man göra så att han lägger ihop alla <select> beroende på hur stor iMax är? Jag antar att det skall till en extra loop..?

imax = antal <select> i forumläret..

/t

JojoxxMedlem sedan juni 20004 308 inlägg
#5
function Calc(iMax){
var iResult=0,iArt="",i,selValue,prize;
for(i=1; i<=iMax; i++){
selValue=eval("document.f_Conf.sel"+i+".options[document.f_Conf.sel"+i+".selectedIndex].value")
iArt+=eval("document.f_Conf.sel"+i+".selectedIndex");
prize=parseFloat(selValue.split(":"));
if(isNaN(prize)){ prize=0; }
iResult+=prize
}
document.f_Conf.txtResult.value = iResult;
document.f_Conf.txtArticleNr.value = iArt;
}

------------------
/ J

tleeMedlem sedan mars 2001290 inlägg
#6

nice... :)

jojoxx du är guld värd du!

/t

------------------
the man with the golden bottle..

tleeMedlem sedan mars 2001290 inlägg
#7

hehe.. ytterligare en grej..

följande rad har kommit till..

<td width=300>Med <input type=text name=txtPercent size=2 OnChange=javascript:Calc(<%=iMax%> );> % i påslag blir det:</td><td><input type=text name=txtResultPercent><i> (exkl moms)</i> </td>

Om jag skriver t.ex 5 i txtPercent fältet så skall txtPercentResult multipliceras med 1.05
och då har priset ökat med 5 procent.. jag har försökt mig på detta..

se nedan kod.

<script lanugage=javascript>
<!--
function Calc(iMax){
var iResult=0,iArt="",i,selValue,prize, intPercent;
for(i=1; i<=iMax; i++){
selValue=eval("document.f_Conf.sel"+i+".options[document.f_Conf.sel"+i+".selectedIndex].value")
iArt+=eval("document.f_Conf.sel"+i+".selectedIndex");
prize=parseFloat(selValue.split(":"));
if(isNaN(prize)){ prize=0; }
iResult+=prize
}
document.f_Conf.txtResult.value = iResult;
document.f_Conf.txtArticleNr.value = iArt;

intPercent = document.f_Conf.txtPercent.value;

if (intPercent = "")
{ 
  intPercent=1; 
}
else
{
  intPercent = intPercent / 100 + 1;
}

document.f_Conf.txtResultPercent.value = intPercent * document.f_Conf.txtResult.value;
}
-->
</script>

funkar ju inte så jättebra.. vad kan vara fel nudå ? :)

/t

[Redigerat av tlee den 14 sep 2001]

JojoxxMedlem sedan juni 20004 308 inlägg
#8

value lämnar ett sträng-värde och går inte att räkna med rakt av.

intPercent = parseFloat(document.f_Conf.txtPercent.value);
if (isNaN(intPercent)) { 
	intPercent=100;
} else {
	intPercent += 100;
}
document.f_Conf.txtResultPercent.value = (intPercent * parseFloat(document.f_Conf.txtResult.value))/100;

------------------
/ J

130 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)