Toon posts:

[JS]Variabel aantal velden optellen

Pagina: 1
Acties:
  • 396 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik bouw een form dynamisch op aan de hand van een aantal records in een database.
Voor ieder record maak ik een aantal inputvelden aan. De naam van deze inputvelden bestaat uit een string , recordvariabele, formvariabele

Bijvoorbeeld een dierendatabase met daarin drie dieren (aap,hond,kat).
Voor ieder dier heb ik drie inputvelden (ontbijt.lunch,diner).
Deze inputvelden wil ik vullen met het aantal gram eten per dag (maandag,dinsdag,woensdag).

Ik heb dus bv. de inputvelden:

ontbijtaapmaandag,lunchaapmaandag,dineraapmaandag etc. etc.

Nu wil ik bij een submit checken dat de dieren samen overdag niet meer dan 1 kilo eten (diner telt dus niet mee!!). Dus bouw ik een javascript stukje wat dat nagaat. Maar hoe tel ik nu de velden :
ontbijtaapmaandag,lunchaapmaandag
ontbijthondmaandag,lunchhondmaandag
ontbijtkatmaandag,lunchkatmaandag

bij elkaar op?

Ik moet dus een substring hebben die de values optelt die starten met ontbijt of lunch en eindigen met een bepaalde dagnaam. Hoe kun je dit doen met substring of iets dergelijks.

Heb al veel paginas bekeken van substring, ltrim etc. maar kom er niet uit.

Thanks

Verwijderd

indexOf()

verder hoort dit in /13, maar daar zal ie wel dicht gaan (net als hier), want dit is echt heel erg basic zoekwerk

Verwijderd

Topicstarter
Bedankt voor je reactie,

Maar hoe haal ik dan de waarde uit de velden die beginnen met een stukje string en eindigen met een stukje string?

want deze functie retourneert alleen de plaats waar een string begint.. toch?

ik zou iets willen als in sql:

select sum(value) from tabel
where name like "lunch&maandag" or "ontbijt&maandag"

[ Voor 22% gewijzigd door Verwijderd op 19-01-2005 22:17 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op woensdag 19 januari 2005 @ 22:15:
Bedankt voor je reactie,

Maar hoe haal ik dan de waarde uit de velden die beginnen met een stukje string en eindigen met een stukje string?

want deze functie retourneert alleen de plaats waar een string begint.. toch?
Wat dacht je dat het betekent als de geretourneerde waarde groter dan 0 is? ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • André
  • Registratie: Maart 2002
  • Laatst online: 23-04 12:47

André

Analytics dude

Je haalt met getElementsByTagName("input") alle inputs op, en daarna zoals BtM909 al zegt kijk je met indexOf of de string die je zoekt er in voorkomt (dus != -1)

[ Voor 5% gewijzigd door André op 19-01-2005 22:23 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:21

crisp

Devver

Pixelated

Al je elementen afgaan, en de name-property testen.
Het eenvoudigst lijkt mij met een reguliere expressie:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<script type="text/javascript">
function submitHandler(form)
{
    var el = form.elements, i = el.length;
    var totalPerDay = [];
    totalPerDay['maandag'] = 0;
    totalPerDay['dinsdag'] = 0;
    totalPerDay['woensdag'] = 0;
    totalPerDay['donderdag'] = 0;
    totalPerDay['vrijdagdag'] = 0;
    totalPerDay['zaterdag'] = 0;
    totalPerDay['zondag'] = 0;

    var re = /^(ontbijt|lunch).+?(maandag|dinsdag|woensdag|donderdag|vrijdag|zaterdag|zondag)$/;

    while (i--)
    {
        var match = re.exec(el[i].name);
        if (match) totalPerDay[match[2]] += parseInt(el[i].value, 10);
    }

    // nu kan je de array totalPerDay doorlopen
    for (var day in totalPerDay)
        alert(day + ': ' + totalPerDay[day] + ' gram');

    return false;
}
</script>
<form action="#" onsubmit="return submitHandler(this)">
    <input type="text" name="ontbijthondmaandag" value="120">
    <input type="text" name="lunchhondmaandag" value="200">
    <input type="text" name="dinerhondmaandag" value="350">
    <input type="text" name="ontbijtkatmaandag" value="80">
    <input type="text" name="lunchkatmaandag" value="120">
    <input type="text" name="dinerkatmaandag" value="200">
    <input type="submit">
</form>


oh ja, dit hoort in Webdesign & Graphics

Intentionally left blank


Verwijderd

Topicstarter
Klopt dit dan? Het werkt alleen niet.. :(
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<script language="JavaScript">
<!-- Begin
function checkrequired(which) {
    var pass = true;
    for (J=0;J<5;J++){
        var dagnummer = dateadd("d",J,<%=dag%>);
        var dagwaarde = 0
        for (i=0;i<which.getElementsByTagName("input");i++) {
            var tempobj=which.elements[i];
            if( ( (tempobj.name.substring(0,10) == "ur_aantal_e") && (tempobj.name.substring(0,10) == "ur_aantal_u") || (tempobj.name.indexof(dagnummer) <> -1) ))
                {   dagwaarde = dagwaarde + tempobj.name.value;
                }
            }
    
        pass=false;
        break;
        }
    }

    if (!pass) {
        alert("Zorg ervoor dat op "+dagnummer+" "+dagwaarde+ " minimaal 8 uur is ingevuld !");
        return false;
        }
else
return true;
}
// End -->
</script>

Ik heb in het script gezegd dat zodra er elementen zijn er een alert moet komen maar er komt geen alert ik heb wel een error maar die is erg vaag:
code:
1
2
3
4
5
Line:  63 
Char:  130 
Error:  Syntax error 
Code:  0 
URL:  http://127.0.0.1/uren_invoer.asp?dag=1/17/2005&opslaan=1


De variabele namen zijn geen dieren meer :D Maar hopelijk kunnen jullie daar doorheen kijken.

[ Voor 33% gewijzigd door Verwijderd op 19-01-2005 23:22 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 23-04 12:47

André

Analytics dude

Je if statement klopt niet.
code:
1
if ( (tempobj.name.substr(0,10) == "ur_aantal_e") && (tempobj.name.substr(0,10) == "ur_aantal_u") || (tempobj.name.indexOf(dagnummer) <> -1) )
Eventueel moeten er nog extra haakjes bij.

[ Voor 21% gewijzigd door André op 19-01-2005 23:19 ]


Verwijderd

Topicstarter
Thanks maar ik krijg nog steeds een error :?

Ik heb m ijn code in de post met mijn code vernieuwd. :*)

[ Voor 43% gewijzigd door Verwijderd op 19-01-2005 23:23 . Reden: Typefouten ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 23-04 12:47

André

Analytics dude

Wat is which dan? Wat staat daar in? Is dat een verwijzing naar een formulier oid?

Verwijderd

Topicstarter
De input which is idd een form

code:
1
onsubmit="return checkrequired(this)"

  • André
  • Registratie: Maart 2002
  • Laatst online: 23-04 12:47

André

Analytics dude

Dan word het zoiets:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<script type="text/javascript">
function checkrequired(which)
{
  var pass = true;
  for (J = 0; J < 5; J++)
  {
    var dagnummer = dateadd("d", J, <%=dag%>);
    var dagwaarde = 0;
    elms = which.getElementsByTagName("input");
    for (i = 0; i < elms.length; i++)
    {
      var tempobj = elms[i];
      if( (tempobj.name.substring(0,10) == "ur_aantal_e") && (tempobj.name.substring(0,10) == "ur_aantal_u") || (tempobj.name.indexof(dagnummer) <> -1) )
      {
        dagwaarde = dagwaarde + tempobj.name.value;
        pass = false;
        break;
      }
    }
  }

  if (!pass)
  {
    alert("Zorg ervoor dat op "+dagnummer+" "+dagwaarde+ " minimaal 8 uur is ingevuld !");
    return false;
  }
  else
  {
    return true;
  }
}
</script>


Let er op dat er een aantal { en } teveel of te weinig stonden :)

Verwijderd

Topicstarter
Thanks, ik krijg nog steeds een error maar ga er morgen weer vrolijk mee verder!!! _/-\o_

  • André
  • Registratie: Maart 2002
  • Laatst online: 23-04 12:47

André

Analytics dude

Als je nou precies weet in welke regel zijn we al een heel eind verder.

Verwijderd

Topicstarter
Het is in de if regel

if( (tempobj.name.substring(0,10) == "ur_aantal_e") && (tempobj.name.substring(0,10) == "ur_aantal_u") || (tempobj.name.indexof(dagnummer) <> -1) )

Hmm thanks maar ik ga nu slapen :Z

  • André
  • Registratie: Maart 2002
  • Laatst online: 23-04 12:47

André

Analytics dude

indexOf is met een hoofdletter ;)

Verwijderd

Topicstarter
Ook dit geprobeerd en nog steeds dezelfde error :'( 8)7

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op donderdag 20 januari 2005 @ 11:33:
Ook dit geprobeerd en nog steeds dezelfde error :'( 8)7
Zet dan ff een voorbeeld online... Hoe moeten wij in hemelsnaam aan de hand van je reply weten waar nu weer die typfout zit? ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

<> in js? dat heb ik nog nooit gezien

maak er eens != van en doe wat meer debugwerk zelf. Spelfouten en syntaxfouten zou je zelf prima moeten kunnen oplossen

Verwijderd

Topicstarter
Nou ben inmiddels een heel eind verder. Hij vind alle velden en pakt de velden waar een nummer in staat. Daar krijg ik nog een error:

ik zeg eerst:
var dagwaarde = 0;

Vervolgens in een if statement:
dagwaarde = dagwaarde + number(tempobj.value);

Ik heb de volgende ook al geprobeerd:
dagwaarde += tempobj.value;
dagwaarde = dagwaarde + tempobj.value;

iemand die me nog kan/wil helpen?

B)

  • André
  • Registratie: Maart 2002
  • Laatst online: 23-04 12:47

André

Analytics dude

Zo dan?

code:
1
dagwaarde = dagwaarde + parseInt(tempobj.value);

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:21

crisp

Devver

Pixelated

JavaScript:
1
2
3
4
var a = 2 + '8'; // wordt string dus '28'
var b = 2 + parseInt('8'); // beide numeriek, dus 10
var c = 2 + parseInt('08'); // decimaal 2 + octaal 8 (=fout, dus cast naar 0) = 2 + 0 = 2
var d = 2 + parseInt('08', 10); // decimaal 2 + decimaal 8 = 10

;)

De snelste manier om hexadecimaal om te zetten naar decimaal is dan ook:

JavaScript:
1
2
var hex = 'ff';
var dec = parseInt(hex, 16); // 255

[ Voor 22% gewijzigd door crisp op 20-01-2005 22:40 ]

Intentionally left blank


Verwijderd

Topicstarter
Het goede nieuws is dat de validatie werkt!!! Bedankt voor alle hulp.

Maar ik heb toch nog een vraag.

In de asp code van die pagina wil ik ook naar een andere functie verwijzen. Dit doe ik door de volgende regel achter de onblur de functie aan te roepen met this (ik dacht dat dit kon net als in de onsubmit):
code:
1
response.write "<TD border=0 bordercolor='#B7C9F7' bgcolor='#E7EDFC'><input type='"&veld&"' class='pageTitle' name='ur_aantal_uren"& oRS("po_id")      &opzoekdag&"' value='"&waarde1&"' size=1 onblur='totaal(this)' "&goedgekeurd&achtergrond&"></td>"


De functie ziet er zo uit

code:
1
2
3
4
5
6
function totaal(which)
{
    var totaal = checkdag(which,which.maandag.value);
    elem = which.getElementByTagName("Totaal"+dagnummer);
    elem.value = totaal;
}


Ik krijg alleen de foutmelding 'maandag.value' is null or not an object
Terwijl in een andere functie hetzelfde wordt gebruikt. Moet ik misschien iets veranderen in de aanroep bij de onblur?

|:(

Het is gelukt _/-\o_ _/-\o_ :)

[ Voor 15% gewijzigd door Verwijderd op 21-01-2005 21:37 ]

Pagina: 1