JavaScript om formulier-gegevens over te dragen hangt.

Pagina: 1
Acties:

  • SvMp
  • Registratie: September 2000
  • Niet online
Ik heb een dialoogvenstertje in HTML/PHP gemaakt waarmee je kunt invoeren welke gemeenten je wilt weergeven. Als je op OK klikt, sluit het venstertje en kun je zoeken.

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
33
34
35
36
<FORM onSubmit="ingevuld_en_klaar()">
<table>
<tr><td>Gemeente:</td><td><INPUT TYPE=TEXT NAME="FORM_gemeente" VALUE="" MAXLENGTH=40 SIZE=40></td></tr>

<tr><td>Provincie:</td><td>
<?php form_provincie_selectie(); ?>
</td></tr>


<tr><td><br>Sorteren op:</td><td>
<br><select name="FORM_sorteren">
<option value="1">gemeente</option>
<option value="2">provincie</option>
<option value="3">ID</option>
</select>
</td></tr>

</table><p>
<CENTER>
<INPUT TYPE=SUBMIT VALUE="OK">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<INPUT TYPE=BUTTON VALUE="Annuleren" onClick="window.close()">
</CENTER>
</FORM>
<script language="JavaScript">

   function ingevuld_en_klaar() {

opener.top.frames[1].document.forms[0].FORM_gemeente.value = document.forms[0].FORM_gemeente.value;
opener.top.frames[1].document.forms[0].FORM_provincie.value = document.forms[0].FORM_provincie.value;
opener.top.frames[1].document.forms[0].FORM_sorteren.value = document.forms[0].FORM_sorteren.value;
 
      opener.top.frames[1].document.forms[0].submit();
      window.close();

   }
</script>


form_provincie_selectie():
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function form_provincie_selectie() {
   echo '<select name="FORM_provincie">';
   echo '<option value="0"></option>';
   echo '<option value="1">Brabant</option>';
   echo '<option value="2">Drenthe</option>';
   echo '<option value="3">Flevoland</option>';
   echo '<option value="4">Friesland</option>';
   echo '<option value="5">Gelderland</option>';
   echo '<option value="6">Groningen</option>';
   echo '<option value="7">Limburg</option>';
   echo '<option value="8">Noord Holland</option>';
   echo '<option value="9">Utrecht</option>';
   echo '<option value="10">Zeeland</option>';
   echo '<option value="11">Zuid Holland</option>';
   echo '</select>';
}


De methode die ik heb gebruikt in de functie ingevuld_en_klaar() werkt.
Ik wil graag een universele functie die voor elk dialoogvenster kan werken, zodat ik deze met php kan uitpoepen.

Ik bedacht het volgende:
code:
1
2
3
opener.top.frames[1].document.forms[0].elements[0].value = document.forms[0].elements[0].value;
opener.top.frames[1].document.forms[0].elements[1].value = document.forms[0].elements[1].value;
opener.top.frames[1].document.forms[0].elements[2].value = document.forms[0].elements[2].value;


Dit werkt!

Nu nog ff in een for-lus prakken. Dit liep fout.
Om na te gaan hoe en wat, heb ik dit in de functie ingevuld_en_klaar() gezet:
code:
1
2
3
4
5
document.write("<p>");
document.write(opener.top.frames[1].document.forms[0].elements.length);
document.write("<p>Test1<p>");
document.write(document.forms[0].elements.length);
document.write("<p>Test2");


De windows.close() er uit gehaald om te voorkomen dat het venster sluit.
Dit debug-scriptje blijft hangen of wordt afgebroken. Op het scherm zie ik de output "3 Test1".
Als ik de regel "document.write(document.forms[0].elements.length);" verwijder, dan verschijnt ook Test2.
Het lijkt dus aan die "document.write(document.forms[0].elements.length);" te liggen.

Maar waarom loopt hier het script op mis?

EDIT: De fout lijkt gevonden te zijn. door de eerdere writes, verdwijnt het formulier en zijn de bijbehorende objecten niet meer definieerd.

[ Voor 82% gewijzigd door SvMp op 18-11-2003 01:24 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 17:43

crisp

Devver

Pixelated

svdmeer schreef op 18 november 2003 @ 01:16:[...]
EDIT: De fout lijkt gevonden te zijn. door de eerdere writes, verdwijnt het formulier en zijn de bijbehorende objecten niet meer definieerd.
Je houdt je ook totaal niet aan de standaard HTML structuur

code:
1
2
3
4
5
6
7
8
9
10
11
<DTD>
<html>
<head>
<meta...>
<script...>
<style...>
</head>
<body>
hier pas je opmaak
</body>
</html>


en inderdaad, als je een document.write gaat uitvoeren nadat de HTML al geparsed is, overschrijf je vrolijk je document weer. Voor debuggen kan je dan beter alerts gebruiken.

Intentionally left blank