[php + js] hoe blaat[] in input uit te lezen in js?

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

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

Topicstarter
Hopelijk heeft de titel de aandacht ;) Vooropgesteld: ik heb redelijk ervaring met php (maar leer elke keer nog steeds) en bijna geen met javascript.

Wat ik heb:
Ik heb een form en daarin een stuk of wat text-input vakken
code:
1
2
3
4
<form method="post" action="<? echo $_SERVER['PHP_SELF']; ?>" onsubmit="return validate();">
<input type="text" name="blaat[]">
<input type="text" name="blaat[]">
<input type="text" name="blaat[]">


Wat ik hiermee graag zou willen kunnen:
mbv javascript op het moment dat er op submit gedrukt wordt de getallen in de vakjes bij elkaar worden opgeteld en vervolgens een alert geven als de som van die getallen ongelijk is aan een bepaald vooropgesteld getal en dan het formulier niet versturen.

Op zich heb ik een idee van de functie validate, maar ik mis 1 heel belangrijke stap, ik heb gezocht, maar kon niet vinden... terwijl het me leek dat sommigen van jullie dit ook hebben gehad.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function validate()
{
  var sum = 0;
  for (var i = 0; i < grootte van array blaat; i++)
  {
    sum += element i van blaat;
  }
  if (sum != vast getal)
  {
    alert("Je mot wel alles totaal vast getal laten zijn!");
    return false;
  } else {
    return true;
  }
}


Kunnen jullie me helpen met "grootte van array blaat" en "element i van blaat"? Zo ja, post het!

Used to be Down Under... Foto gallery


  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 03-02 15:29
Misschien vreemde vraag, maar waarom zou je die som door javascript laten bepalen?

Ook Knor is aangestoken met het ligfietsvirus!


  • Blorgg
  • Registratie: Juni 2001
  • Niet online
Is geen vreemde vraag ;)
Als je het in php doet weet je tenminste zeker dat het voor elke user toegepast wordt. Sommige mensen hebben namelijk JS in hun browser uitstaan.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Ik weet wel dat JS thuishoort in Webdesign & Graphics, dus ff gemoved :)

Verder denk ik dat JS niet weet hoe PHP omgaat met velden die "blaat[]" heten. 't Is namelijk iets wat bij PHP geregeld wordt door het stukje software wat draait voordat het script gestart wordt. Kortom, niks standaard aan, dus waarom zou JS het 1,2,3 snappen? :Y)

Dus, we moeten er zelf een oplossing voor verzinnen en die in JS schrijven. Je zou bijvoorbeeld na kunnen gaan op welke manier PHP met dergelijke velden omgaat, en eenzelfde systeem voor JS generiek implementeren. 't Lastige is alleen dat je in JS niet elke keer een dergelijke functie aan moet hoeven roepen om je informatie te krijgen, dus zal je het wel extra generiek moeten doen :)

Ik denk zelf aan zoiets:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
function getPhpInputArray ( form, name ) {
   var theform = document.forms [ form ];
   var retArray = [];
   var re = new Regex ( '/^' + name + '\\[]$/' );
   for ( var elementIndex in theform.elements ) {
      if ( re.test ( elementIndex ) ) {
         retArray.push ( theform.elements [ elementIndex ].value );
      }
   }
   return retArray;
}


Verder zou je zo'n stukkie code natuurlijk uit kunnen breiden voor geneste array's en named arrays maar dat mag je dan lekker zelf verzinnen :P

hth :)

[ Voor 6% gewijzigd door drm op 22-12-2002 10:22 . Reden: typo ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Tim
  • Registratie: Mei 2000
  • Laatst online: 23-07 15:18

Tim

Ik dacht zelf eerder aan

JavaScript:
1
document.getElementById("blaat" + i).value;
of is dit niet geldig? (ik gebruik niet zoveel JS)

edit:
Laat maar, ik snap al waarom dat niet werkt :P *slaat zichzelf*

[ Voor 32% gewijzigd door Tim op 22-12-2002 11:17 . Reden: hoofdletter gevoelig.. ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:16

crisp

Devver

Pixelated

Het is gewoon veel simpeler:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function validate() {

  var sum = 0;
  var blaatArray = document.forms['blaatform'].elements['blaat[]'];
  for (var i = 0; i < blaatArray.length; i++) {
    sum += parseInt(blaatArray[i].value, 10);
  }
  if (sum != 10) {
    alert("Totaal moet 10 zijn!");
    return false;
  } else {
    return true;
  }

}


Edit:
Kijk hoe ik hier de array blaat aanspreek (ja, het is een array :) ), en ook dat je je form een naam geeft (document.forms[0] werkt ook als het het enige form is)
Tevens moet je de values naar integer omzetten; daarbij verdient het natuurlijk ook aanbeveling om eerst te checken of er wel een getal is ingegeven - dat moet je zelf nog toevoegen.

[ Voor 36% gewijzigd door crisp op 22-12-2002 11:15 ]

Intentionally left blank


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:16

crisp

Devver

Pixelated

Blorgg schreef op 22 December 2002 @ 00:40:
Is geen vreemde vraag ;)
Als je het in php doet weet je tenminste zeker dat het voor elke user toegepast wordt. Sommige mensen hebben namelijk JS in hun browser uitstaan.
Dat is te verwaarlozen; ga jij maar eens surfen met JS uitgeschakeld, ik denk dat je het heel snel weer aanzet :)
Uiteraard verdient het wel aanbeveling om serverside de input nogmaals te checken :)

Intentionally left blank


  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

Topicstarter
crisp schreef op 22 december 2002 @ 11:10:
Het is gewoon veel simpeler:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function validate() {

  var sum = 0;
  var blaatArray = document.forms['blaatform'].elements['blaat[]'];
  for (var i = 0; i < blaatArray.length; i++) {
    sum += parseInt(blaatArray[i].value, 10);
  }
  if (sum != 10) {
    alert("Totaal moet 10 zijn!");
    return false;
  } else {
    return true;
  }

}


Edit:
Kijk hoe ik hier de array blaat aanspreek (ja, het is een array :) ), en ook dat je je form een naam geeft (document.forms[0] werkt ook als het het enige form is)
Tevens moet je de values naar integer omzetten; daarbij verdient het natuurlijk ook aanbeveling om eerst te checken of er wel een getal is ingegeven - dat moet je zelf nog toevoegen.
Iets in deze vorm was een van mijn baksels die ik getest had... (behalve die parseInt) en dat werkte niet :'(... Typefoutje blijkbaar ergens dus.
Mijn dank is groot. De oplossing die drm gaf is qua idee erg leuk, maar werkt niet. Ik denk dat hij vanaf de Regex niet werkt (dmv document.write(re) gevonden dat hij vanaf daar helemaal niets meer print).

offtopic:
Ik schaam zich over de plaatsing van het topic. Ik had beter moeten weten *shame*. Sorry drm :'(

[ Voor 3% gewijzigd door PrinsEdje80 op 23-12-2002 10:02 . Reden: typo's ]

Used to be Down Under... Foto gallery


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

hmja, ik zie nu dat ik een (beetje) domme denkfout heb gemaakt... Een index kan natuurlijk helemaal niet vaker in 1 array voorkomen :/
offtopic:
Ik schaam zich over de plaatsing van het topic. Ik had beter moeten weten *shame*. Sorry drm :'(
np :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1