Just nu i M3-nätverket
Gå till innehåll

räknare problem i variabel


SlugoIII

Rekommendera Poster

hej, jag försöker mig på ett dynamiskt formulär som skall summera ihop antal, pris till total, under en räknare. dvs antal fält bestäms av en räknare. jag gör detta i vbscript och kan inte få räknaren att fungera. ger fel hela tiden. här är en bit av koden:

 

function text()

set doc=document.form

i=doc.i.value

for x=1 to i

if clng(doc.pax(x).value)=0 then

doc.sum(x).value = 0

else

doc.sum(x).value = clng(doc.pri(x).value) + clng(doc.pax(x).value)

end if

 

doc.total.value = clng(doc.sum(x).value)

next

end function

 

 

felet blir följande: objektet stöder inte egenskapen eller metoden 'doc.pax'

 

jag fattar inte varför jag inte kan sätta in min räknare i pax?

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Hm, var att börja. Till att börja med, varför använder du VBScript som klientscript? Det fungerar bara i IE-baserade webbläsare.

 

Men om du absolut måste använda det (vilket krånglar till väldigt mkt för dig) så måste du tilldela ALLA objekt du vill använda.

 

Ex. i if clng(doc.pax(x).value)=0 then försöker IE att anropa metoden pax, på objektet doc, med parametern x. Även om denna fanns skulle sedan .value vara ett direkt syntaxfel.

 

I det här fallet skulle du få använda (OBS! DOM-arrayer börjar på index 0):

 

	for x=0 to i-1
	set pax=doc.pax
	if clng(pax(x).value)=0 then

 

Nä, mitt förslag är att följa standard och använda Javascript, annars kommer din sajt blockera väldigt många användare från funktionalitet.

 

Länk till kommentar
Dela på andra webbplatser

ok, jag tackar för svaret, och tycker faktiskt som du att javascript vore bättre, men jag stött på många problem där också. hur skulle man då konvertera detta till java. om du förstår mitt skript eller vad jag vill göra med det dvs.

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

I just fallet klientscript för webben så anser jag javascript vara överlägset, eftersom det kan behandla objektmodellen på "rätt" representativa sätt. Du refererar till objekten och elementen på sidan på samma sätt som i en traditionell objektorienterad modell. Detta är inte VBScript designat för, eftersom det är baserat på ett icke-objektorienterat språk.

 

Nu har dock standarden gett Javascript utökade funktioner för att leta rätt på element och jag använder mig av dem i mitt förslag till översättning av din kod:

 

Jag skulle översätta ditt script så här. om jag förstått dig rätt:

 

<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
function text() {
oI=document.getElementsByName('i')[0];
oTot=document.getElementsByName('total')[0];
oPax=document.getElementsByName('pax');
oSum=document.getElementsByName('sum');
oPri=document.getElementsByName('pri');
i=parseInt(oI.value);
nTot=0;
for (x=0;x<i;x++) {
	nPax=parseInt(oPax[x].value);
	nPri=parseInt(oPri[x].value);
	nTmp=(nPax==0)?0:(nPax+nPri);
	oSum[x].value=nTmp;
	nTot+=nTmp;
}
oTot.value=nTot;
}

//-->
</SCRIPT>

 

Länk till kommentar
Dela på andra webbplatser

ok,

jag har ersatt min kod med din. jag la till en var oI, men sen får jag ett fel:'value' är null eller inte ett objekt.

 

i=parseInt(oI.value);

 

fråga: oI=document.getElementsByName('i')[0];

tilldelar du i till noll direkt på detta sättet?

 

för övrigt så ser det ut som du förstått min kod. att pax och pri är dynamiska variabler som summeras ihop i den dynamiska sum, då i är räknaren som bestämmer antal loops. alla sum skall in i total.

 

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Du hade använt doc.i.value , syftade inte detta på ett input-fält med NAME="i" ?

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon
jag förstår bara inte vad [0] betyder?

Så här fungerar getElementsByName:

 

document.getElementsByName('i');

Detta hämtar en array av ALLA element på sidan med NAME="i". I ditt fall använder du bara ett enda element med detta namn och det är det första (och enda) elementet i arrayen, dvs med index=0. [0] hämtar alltså ut första elementet ur arrayen.

 

Jämför detta med getElementById('id1') som enbart returnerar ett enda element, eftersom det bara får förekomma ett element med ett visst ID på en sida.

 

 

[inlägget ändrat 2005-03-23 10:29:18 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

ok, då är jag med.

 

jag får meddelandet: 'value' är null eller inte ett objekt.

 

hur kan detta komma sig att den inte kan hitta objektet .value, är det ett syntaxfel? eller har det med att man kallar en array?

 

spännande saker det här. he he.

 

 

 

 

 

 

[inlägget ändrat 2005-03-23 11:24:00 av SlugoIII]

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

När anropar du funktionen då? Du kan inte anropa den innan sidan är färdigladdad, eftersom elementet inte garanterat "existerar" ännu. Har du någon länk till sidan? Posta annars koden (lägg den innanför [ LOG ]-taggar så det inte skrymmer)

 

Länk till kommentar
Dela på andra webbplatser

hmm. min sida är lokal. jag anropar funktionen med en onchange.

se kod nedan.

 

 

<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">

<!--

function

text2() {

 

var oI;

 

oI=document.getElementsByName('i')[0];

oTot=document.getElementsByName('total')[0];

oPax=document.getElementsByName('pax');

oSum=document.getElementsByName('sum');

oPri=document.getElementsByName('pri');

i=parseInt(oI.value);

nTot=0;

for (x=0;x<i;x++) {

nPax=parseInt(oPax[x].value);

nPri=parseInt(oPri[x].value);

nTmp=(nPax==0)?0:(nPax+nPri);

oSum[x].value=nTmp;

nTot+=nTmp;

}

oTot.value=nTot;

}

 

//-->

</SCRIPT>

 

 

<% for x=1 to 3 %>

 

<tr bgcolor="#e0e0e0">

<td height="25" align="right" bgcolor="#e0e0e0">&nbsp;</td>

<td>

 

<select class="GSBlack" name="pax<%= x %>" onChange="text()">

<% for i=1 to 4 %>

<option selected value="<%= i %>"><%= i %></option>

<% next %>

</select>

<input name="price<%= x %>" type="hidden" value="30" size="8" maxlength="8">

<input name="sum<%= x %>" type="text" disabled="true" value="2" size="8" maxlength="8">

 

</td>

</tr>

 

<% next %>

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Var är INPUT-elementet med NAME="i" då? Finns det ens ett sådant eller har du blandat ihop serverscript-variablerna med klientscriptets?

 

Länk till kommentar
Dela på andra webbplatser

ha! ja den var ju fin. den hade jag tagit bort. ok. jag la in den som en hidden form tills vidare för att få igång det. jag lyckades nu komma för bi value problemet på oI, nu fasnar jag på 'oPax[...].value', jag ska kolla lite på det.

 

ok, från min tidigare kod så tilldelar jag pax,pri och sum med en asp räknare. detta går ju inte alls om man skapar en array i funktionen. jag har tagit bort det nu.. så här ser det ut nu. och det fungerar nästan. jag får inga felmeddelanden, men den summerar inte ihop samtliga fält. dvs, arrayerna pax,pri och sum, efter värdet 0.

 

ser du något konstigt?

 

koden:

 

 

 

<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">

<!--

function

text2() {

 

var oI,oPax,oSum,oPri,oTot,i,nTot,nPax,nSum,nPri;

 

oI=document.getElementsByName('i')[0];

oTot=document.getElementsByName('total')[0];

oPax=document.getElementsByName('pax');

oSum=document.getElementsByName('sum');

oPri=document.getElementsByName('pri');

i=parseInt(oI.value);

nTot=0;

for (x=0;x<i;x++) {

nPax=parseInt(oPax[x].value);

nPri=parseInt(oPri[x].value);

nTmp=(nPax==0)?0:(nPax*nPri);

oSum[x].value=nTmp;

nTot+=nTmp;

}

oTot.value=nTot;

}

 

//-->

</SCRIPT>

 

<% for x=1 to 3 %>

 

<tr bgcolor="#e0e0e0">

<td height="25" align="right" bgcolor="#e0e0e0"> </td>

<td>

<select class="GSBlack" name="pax" onChange="text2()">

 

<% for i=1 to 4 %>

<option selected value="<%= i %>"><%= i %></option>

<% next %>

 

</select>

 

<input name="i" type="hidden" value="<%= x %>" size="8" maxlength="8">

<input name="pri" type="hidden" value="30" size="8" maxlength="8">*30=

<input name="sum" type="text" disabled="true" value="0" size="8" maxlength="8"></td>

</tr>

 

<% next %>

[inlägget ändrat 2005-03-23 13:46:24 av SlugoIII]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...