Avatar billede heyn Nybegynder
24. november 2005 - 12:37 Der er 11 kommentarer og
1 løsning

Tjekke indhold i felter og sumere disse.

Hej Alle
Jeg skal lave en formular noget i stil med følgende:

<form name="en_form" action="en_side" type="post" onsubmit="test_form()">
<input id="text" name="tekst" onchange="return test_tekst()">
<input value="0" id="T1" name="tal1" onchange="sum_tal()">
<input value="0" id="T2" name="tal2" onchange="sum_tal()">
<input value="0" id="T3" name="tal3" onchange="sum_tal()">
<input type="submit" value="Test form">
</form>

sum_tal() skal som nævnt vise resultatet et andet sted på siden og teste at feltet kun indeholder tal. Tilsvarende skal test_tekst() sikre at feltet kun indeholder bogstaver og mellemrum.
endelig skal test_form() gøre begge dele.
Mvh Christian
Avatar billede heyn Nybegynder
24. november 2005 - 12:39 #1
Sorry - ikke
<input id="text" name="tekst" onchange="return test_tekst()">
men
<form name="en_form" action="en_side" type="post" onsubmit="return test_form()">
<input id="text" name="tekst" onchange="test_tekst()">
Avatar billede heyn Nybegynder
24. november 2005 - 12:42 #2
Endnu en sorry -
sum_tal() skal summere T1,T2 og T3 og vse resultat et andet sted på siden.
Avatar billede johan.o Nybegynder
24. november 2005 - 14:10 #3
Hvad med noget alá :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<title>Test.</title>
<script type="text/javascript">

oTek=""; oTal1=""; oTal2=""; oTal3="";

function cTekst(oObject) {
if(oObject.value.match(/^[\w\s,.-]*$/)) {
  oTek=oObject.value; }
else {
  oObject.value=oTek; } }

function cTal(oObject) {
if(oObject.value.match(/^\d*$/)) {
  oTal1=+document.getElementById("T1").value;
  oTal2=+document.getElementById("T2").value;
  oTal3=+document.getElementById("T3").value;

  oSum=oTal1+oTal2+oTal3;

  document.getElementById("Sum").value=oSum; }
else {
  document.getElementById("T1").value=oTal1;
  document.getElementById("T2").value=oTal2;
  document.getElementById("T3").value=oTal3; } }

</script>
</head>

<body>

<form action="en_side" method="post">
<p><input type="text" name="tekst" onkeyup="cTekst(this);"></p>
<p><input type="text" id="T1" name="Tal1" onkeyup="cTal(this);"></p>
<p><input type="text" id="T2" name="Tal2" onkeyup="cTal(this);"></p>
<p><input type="text" id="T3" name="Tal3" onkeyup="cTal(this);"></p>
<p><input type="text" id="Sum" name="Sum" disabled></p>
<p><input type="submit" value="Test form"></p>
</form>

</body>
</html>

Måske ikke så vedligeholdelses venligt, men funktionaliteten kan du da lege videre med :)

Mvh. Johan
Avatar billede roenving Novice
24. november 2005 - 14:28 #4
Eller:

<script type="text/javascript">
function test_form(f){
  if(!(test_tekst(f.textFld) && sum_tal(f.tal1) && sum_tal(f.tal2) && sum_tal(f.tal3)))
    return false;
  else return true;
}
function test_tekst(elm){
  if(!elm.value.match(/^[a-zæøå ]+$/i)){//Godkender _ikke_ f.eks. hans-ole eller è, ü osv.
    alert("Du skal skrive en tekst");
    elm.focus();
    return false;
  }
  return true;
}
function sum_tal(elm){
  if(!elm.value.match(/^\d+([.,]\d+)?$/)){
    alert("Du skal skrive et tal !-)");
    elm.focus();
    document.getElementById("sum").firstChild.nodeValue = "Fejl";
    return false;
  }
  var fld,sum = 0;
  for(i=1;3>=i;i++){
    fld = document.getElementById("T" + i);
    sum += fld.value.match(/^\d+([.,]\d+)?$/) ? +fld.value.replace(/,/,".") : 0;
  }
  document.getElementById("sum").firstChild.nodeValue = sum;
  return true;
}
</script>

<form name="en_form" action="en_side" type="post" onsubmit="return test_form(this)">
<input id="textFld" name="tekst" onchange="test_tekst(this)">
<input value="0" id="T1" name="tal1" onchange="sum_tal(this)">
<input value="0" id="T2" name="tal2" onchange="sum_tal(this)">
<input value="0" id="T3" name="tal3" onchange="sum_tal(this)">
<input type="submit" value="Test form">
</form>

Ialt: <span id="sum">&nbsp;</span>
Avatar billede heyn Nybegynder
24. november 2005 - 15:00 #5
Tak roenving
Det var til stor hjælp. Mange gode trick.
Man må altså godt skrive getDocumentById('T'+i)!!! Det var jeg ikke klar over. Det vil afhjælpe mange problemer. jeg skal have et ukendt antal af disse formularer på samme side som genereres af en for-løkke i php.
Også tak for <span>-ideen. Dette med et input-felt der er disabled har jeg nemlig prøvet, og det gør teksten svært læselig.
Angående test_tekst:
Hvordan skal (!elm.value.match(/^[a-zæøå ]+$/i) udformes hvis '-' godt må medtages?
Mvh Christian.
P.s.: Kender du nogle gode Tuturials-sider for udformning af indholdet i match()? Jeg syntes det er ret svært!
Avatar billede heyn Nybegynder
24. november 2005 - 17:59 #6
Også tak til dig johan.o - jeg så ikke din onkeyup ide. Klart nok!
Hvad begge løsninger gælder er der dog et problem!
Hvis jeg skriver f.eks. 022 i et felt bliver det tolket som 18 når jeg laver beregningen:
var x = document.getElementById('T1').value;
var y = document.getElementById('T2').value;
var z = document.getElementById('T3').value;
document.getElementById('new_sum').firstChild.nodeValue = parseInt(x)+parseInt(y)+parseInt(z);
Hvordan kan det være?
Mvh Christian
Ps Hvad med nogle SVAR?
Avatar billede johan.o Nybegynder
24. november 2005 - 21:33 #7
Det er din brug af parseInt() der skaber problemet. Du kan læse lidt om det her :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/js56jsmthparseint.asp

Humlen er at parseInt() opfatter alle tal som starter med 0 som et oktal-tal, med mindre du skriver parseInt(x, 10) for at fortælle at det tal der skrives altid er en del af ti tals systemet.

Mvh. Johan
Avatar billede johan.o Nybegynder
24. november 2005 - 21:36 #8
Talsystemer 'diskuteres' bl.a. en del i denne tråd, så den kan måske hjælpe.

http://exp.dk/spm/649077

Mvh. Johan
Avatar billede johan.o Nybegynder
24. november 2005 - 21:41 #9
Du kan, istedet for parseInt(), skrive var x=+document.getElementById('T1').value; så opfattes x som et tal.

Mvh. Johan
Avatar billede johan.o Nybegynder
25. november 2005 - 00:28 #10
ref 24/11 17:59 --> Hvordan skal (!elm.value.match(/^[a-zæøå ]+$/i) udformes hvis '-' godt må medtages?

(/^[a-zæøå -]+$/i)

Mvh. Johan
Avatar billede heyn Nybegynder
25. november 2005 - 10:48 #11
Mange tak for hjælpen og god weekend - Christian
Avatar billede johan.o Nybegynder
25. november 2005 - 10:49 #12
Tak for points :)

Mvh. Johan
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester