Toon posts:

[JS] innerHTML + javascript variabele gaat fout

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Wat ik heb:
Een pagina waar een klant van mij prijzen moet gaan invullen.
Een kamer kan er in meerdere mogelijke combinaties zijn. Daarom heb ik een pulldown menu en afhankelijk de geselecteerde waarde komen er invul velden te voorschijn.
Wanneer er in een invul veld een waarde wordt ingevuld dan wordt de totale kamer prijs berekend.

Waar gaat het fout:
De 'gegenereerde' innerHTML code wordt laten zien op de pagina na veel gekut :+ .
Echter is het zo dat wanneer ik de innerHTML code bekijk van de eerste, altijd aangemaakte, div, d.m.v. simpel knopje, dat de waardes die met de functie moeten worden meegegeven zijn anders dan de inhoud van de javascript variabele. Onderin de code staat aangegeven waar dit gebeurt.

Het voorbeeld is te zien op http://phpcastle.com/temp/test2.php

Betreffende javascript:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<script language="javascript">
  var output = "";
  var combinatie = "";

  function update_combinaties (form,kamer_nummer){
    output = "";
    combinatie = document.getElementById('combinatie_holder[' + kamer_nummer + ']');
    for (i = 1; i <= document.forms[form].elements['aantal_combinaties[' + kamer_nummer + ']'].value; i++){
      //Deze werkt wel goed volgens mij omdat ik de innerHTML hiervan kan opvragen...
      output += '<div id="combinatie[' + kamer_nummer + '][' + i + ']">';
        output += '<table>';
          output += '<tr>';
            output += '<td>';
              output += '<fieldset>';
-->             output += '<legend>Combinatie ' + i + '  - Totaal prijs: <input id="totaal[' + kamer_nummer + '][' + i + ']" type="text" /></legend>';
                output += '<table>';
                  output += '<tr>';
                    output += '<td>Aantal volwassenen:</td>';
                    output += '<td>';
-->                   output += '<select name="aantal_volwassenen[' + kamer_nummer + '][' + i + ']" onchange="javascript: bereken_totale_prijs("form","' + kamer_nummer + '","' + i + '");">';
                        output += '<option value="1">1</option>';
                        output += '<option value="2" selected>2</option>';
                        output += '<option value="3">3</option>';
                        output += '<option value="4">4</option>';
                      output += '</select>';
                    output += '</td>';
                  output += '</tr>';
                  output += '<tr>';
                    output += '<td>Prijs volwassene:</td>';
                    output += '<td>';
-->                   output += '<input name=\'prijs_volwassenen[' + kamer_nummer + '][' + i + ']\' onkeyup="javascript: bereken_totale_prijs("form","' + kamer_nummer + '","' + i + '");" type="text" />';
                    output += '</td>';
                  output += '</tr>';
                  output += '<tr>';
                    output += '<td colspan="2">';
                      output += '<fieldset>';
                        output += '<legend>';
-->                       output += '<input name="kind_categorie_een[' + kamer_nummer + '][' + i + ']" onclick="javascript: bereken_totale_prijs("form","' + kamer_nummer + '","' + i + '");" type="checkbox" />Kinder categorie 1';
                          output += '<select>';
                            output += '<option>2 tot 6</option>';
                            output += '<option>2 tot 7</option>';
                          output += '</select>';
-->                       output += '<select name="aantal_kind_categorie_een[' + kamer_nummer + '][' + i + ']" onchange="javascript: bereken_totale_prijs("form","' + kamer_nummer + '","' + i + '");">';
                            output += '<option value="1">1</option>';
                            output += '<option value="2">2</option>';
                            output += '<option value="3">3</option>';
                            output += '<option value="4">4</option>';
                          output += '</select>';
                        output += '</legend>';
-->                     output += '<input name="prijs_kind_categorie_een[' + kamer_nummer + '][' + i + ']" onkeyup="javascript: bereken_totale_prijs("form","' + kamer_nummer + '","' + i + '");" type="text" />';
                      output += '</fieldset>';
                    output += '</td>';
                  output += '</tr>';
                  output += '<tr>';
                    output += '<td colspan="2">';
                      output += '<fieldset>';
                        output += '<legend>';
-->                       output += '<input name="kind_categorie_twee[' + kamer_nummer + '][' + i + ']" onclick="javascript: bereken_totale_prijs("form","' + kamer_nummer + '","' + i + '");" type="checkbox" />Kinder categorie 1';
                          output += '<select>';
                            output += '<option>2 tot 6</option>';
                            output += '<option>2 tot 7</option>';
                          output += '</select>';
-->                       output += '<select name="aantal_kind_categorie_twee[' + kamer_nummer + '][' + i + ']" onchange="javascript: bereken_totale_prijs("form","' + kamer_nummer + '","' + i + '");">';
                            output += '<option value="1">1</option>';
                            output += '<option value="2">2</option>';
                            output += '<option value="3">3</option>';
                            output += '<option value="4">4</option>';
                          output += '</select>';
                        output += '</legend>';
-->                     output += '<input name="prijs_kind_categorie_twee[' + kamer_nummer + '][' + i + ']" onkeyup="javascript: bereken_totale_prijs("form","' + kamer_nummer + '","' + i + '");" type="text" />';
                      output += '</fieldset>';
                    output += '</td>';
                  output += '</tr>';
                output += '</table>';
              output += '</fieldset>';
            output += '</td>';
          output += '</tr>';
        output += '</table>';
      output += '</div>';
    }
    combinatie.innerHTML=output;
  }
</script>


Ik zie dus niet waar het fout gaat. Als iemand enig idee heeft.... _/-\o_

- Statix

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:27

crisp

Devver

Pixelated

Je gaat de mist in met je quotes bij je javascript aanroepen. Overigens hoeft/mag er geen javascript: binnen een eventhandler staan.
afgezien van het feit dat ik dit een zeer ranzige oplossing vind.

Intentionally left blank


Verwijderd

Topicstarter
Hoe zou je het aanraden dan?

Btw... ik spreek de javascript functie aan om de prijs te berekenen. Daar zit m namelijk ook het probleem in. Tussen de haken van de aan te spreken functie .... 8)7

  • André
  • Registratie: Maart 2002
  • Laatst online: 06-05 11:13

André

Analytics dude

Gewoon de statische elementen in html op de pagina zetten en de dynamische elementen via het DOM toevoegen op de juiste plek met de juiste namen.

Zoek maar eens op createElement :)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:27

crisp

Devver

Pixelated

1 woord: escapen:
JavaScript:
1
output += '<select name="aantal_volwassenen[' + kamer_nummer + '][' + i + ']" onchange="bereken_totale_prijs(\'form\',\'' + kamer_nummer + '\',\'' + i + '\');">';


En tsja; ik heb het er niet zo op om hele lappen HTML op deze manier te genereren en via het vieze innerHTML ergens in te gooien. In dit geval had ik er waarschijnlijk zelfs een postback tegenaan gegooid en had PHP het aantal formulieren laten genereren. Daarbij kunnen er een aantal dingen gewoon efficienter (handle naar je formulier doorgeven aan javascript middels het 'this'-keyword bijvoorbeeld).

Maar goed; als je je escaping op order hebt zal het waarschijnlijk wel werken...

Intentionally left blank


Verwijderd

Topicstarter
André schreef op vrijdag 18 maart 2005 @ 16:12:
[...]
Gewoon de statische elementen in html op de pagina zetten en de dynamische elementen via het DOM toevoegen op de juiste plek met de juiste namen.
Dat is dus al wat er gebeurt op dit moment. ER is een behoorlijke brok HTML wat er uitgekwakt moet gaan worden...
crisp schreef op vrijdag 18 maart 2005 @ 16:16:
1 woord: escapen:

En tsja; ik heb het er niet zo op om hele lappen HTML op deze manier te genereren en via het vieze innerHTML ergens in te gooien. In dit geval had ik er waarschijnlijk zelfs een postback tegenaan gegooid en had PHP het aantal formulieren laten genereren. Daarbij kunnen er een aantal dingen gewoon efficienter (handle naar je formulier doorgeven aan javascript middels het 'this'-keyword bijvoorbeeld).

Maar goed; als je je escaping op order hebt zal het waarschijnlijk wel werken...
Dynamisch is niet te doen omdat er veel gegevens geselecteerd moet kunnen worden die gewoon meteen bijgewerkt moet worden.

De berekening heb ik werkend gekregen.... zal met de quote te rommelen :+

[ Voor 45% gewijzigd door Verwijderd op 18-03-2005 16:19 ]

Pagina: 1