webForumDet fria alternativet

Mitt javascript kan inte räkna högre än till 10

8 svar · 882 visningar · startad av PollyJuice

PollyJuiceMedlem sedan mars 2006124 inlägg
#1

Det här javascriptet ska utföra en beräkning av ett kua-nummer, vilket jag kommer att använda i ett projekt på temat feng shui. På sidan har jag en form som ger olika värden på "ar" beroende på vilket årtal folk väljer i listan. Javascriptet tar sen reda på (utifrån ett annat val i form) ifall användaren är man eller kvinna. Om användaren är en man, ska värdet på ar subtraheras från 10. Om användaren är en kvinna, ska värdet på ar adderas med 5. Resultatet läggs i variabeln kua.
Vitsen är att kua ska bli ett ensiffrigt tal. Eftersom ar-värdet aldrig kan bli större än 9, så får vi inga problem med användare = man, eftersom vi alltid får ett ensiffrigt tal efter subtraktionen.
Så långt är allt väl.

MEN!
Om en kvinna får ett ar-värde på 5,6,7,8, eller 9, vilket efter additionen ger kua>=10, så behöver vi lägga ihop de båda siffrorna för att få ett ensiffrigt tal. För att slippa krångla med split och sånt, så minskar vi helt enkelt kua med 9, vilket ger samma resultat.
Ex)
kua = 14. 1+4 = 5 ELLER 14-9 =5. Smidigt och bra.
Tyvärr så orkar javascriptet inte hålla reda på vad summan av additionen faktiskt blir, utan låser fast den vid prick 10. Om ar-värdet är 9, och kua efter additionen blir 14 - - - så envisas javascriptet med att tro att kua är 10. Varför kan den inte räkna längre än till 10? Hur ska jag göra för att lära den det?

Koden för javascriptet ser ut såhär:

<script type="text/javascript">
function kuaMe()
{
var d = document;
var efternamn = d.getElementById('efternamn');
var fornamn = d.getElementById('fornamn');
var ar = d.getElementById('ar');
var kon = d.getElementById('kon');
var el = d.getElementById('Inmatning');
var kua;

el.style.display = 'none';

switch(kon.value){
case "man":
kua = 10 - ar.value;
break;

case "kvinna":
var i=0;
for (i=0;i<=4;i++)
{kua = ++ar.value;}
break;
}

if(kua>=10)
{
var j =0;
for(j=0;j<=8;j++)
{
kua = --kua;
}
}

var str = "<div>" + kua + "<br />";
str = str + "</div>";

var result = d.getElementById("Resultat");
result.innerHTML = str;
return false;

}

</script>

sgtpepperMedlem sedan apr. 20007 588 inlägg
#2

PollyJuice skrev:

kua = 14. 1+4 = 5 ELLER 14-9 =5. Smidigt och bra.
Tyvärr så orkar javascriptet inte hålla reda på vad summan av additionen faktiskt blir, utan låser fast den vid prick 10.

Jag orkar inte fundera på varför du gör som du gör eller varför man vill räkna ut New Age-nummer med JavaScript, men om du vill minska en variabel med 9, gör då det direkt, utan att använda en for-loop som stegvis minskar värdet (!):

kua = kua - 9;
PollyJuiceMedlem sedan mars 2006124 inlägg
#3

Av någon anledning funkar inte det heller. När jag försöker räkna ut kuanummer för en kvinna född 1981 får jag svaret 1, dvs den minskar 10 med 1 istället för 14 med 1.

GeinMedlem sedan sep. 20005 700 inlägg
#4

Detsamma gäller ju för din märkliga addition med 5 där du adderar 1 i taget.
Skriv ut några alert('...'); på väl valda tillfällen så hittar du nog snart felkällan.

PollyJuiceMedlem sedan mars 2006124 inlägg
#5

Jag kan inte skriva

kua = 5+ar.value;

för då får jag svaret 59, dvs den tolkar ar.value som en string. Jag provar med

var d = document;
var efternamn = d.getElementById('efternamn');
var fornamn = d.getElementById('fornamn');
var ar = d.getElementById('ar');
parseInt(ar.value);
var kon = d.getElementById('kon');
var el = d.getElementById('Inmatning');
var kua;

el.style.display = 'none';

switch(kon.value){
case "man":
kua = 10 - ar.value;
break;

case "kvinna":
kua = 5 + ar.value;
break;
}

men det hjälper inte heller. Hur ska jag få den att fatta att ar.value ska vara en int och inte en string?

PollyJuiceMedlem sedan mars 2006124 inlägg
#6

Om jag använder min for-sats för att addera, så tycks den åtminstone fatta att den ska addera 5 till ar.value - det funkar för kvinna år 1976 iallafall - men så fort jag testar med kvinna 1981 så slutar den räkna när den kommer till 10, istället för att skriva att kua=14.

PollyJuiceMedlem sedan mars 2006124 inlägg
#7

Näver mind, som björken sa - jag kom på det. Tack ändå!

GeinMedlem sedan sep. 20005 700 inlägg
#8

Det tillhör god forumhyfs att också presentera sin lösning utifall andra stöter på liknande problem och hittar denna tråd.

PollyJuiceMedlem sedan mars 2006124 inlägg
#9

Sorry - det blev såhär, till slut:

$ar = $_POST["ar"];
$kon = $_POST["kon"];

if( strcmp($kon, 'man')==0 ) $kua = 10-$ar;
  else {
    $kua = $ar;
  for ($i=0;$i\<=4;$i++) $kua++;	
}
  
  if ($kua\>=10) $kua = $kua-9;

  if ($kua == 5)
    if( strcmp($kon, 'man') == 0 ) $kua = 2;
  	else $kua=8;
135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)