[JS] Ik krijg geen value aan dynamisch hidden field

Pagina: 1
Acties:

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 24-11 23:24
Ik heb een adresklasse geschreven die compleet dynamisch opgebouwd wordt vanuit JavaScript. Er zit een functie in die nadat er gecheckt is op een database plaatsnaam en straatnaam retourneert. Dit script maakt van text inputs hidden inputs via de functie swapType.

Als ik 'hidden' gebruik als type om de input naar te swappen, dan kan ik vooraf en achteraf toekennen en checken wat ik wil, maar als ik submit komt het niet mee. Zodra ik de twee swapType calls uitcommentarieer werkt het als een tierelier. De DOM inspector en view selection source daar word ik ook niks wijzer van.

Verwerkende functin
JavaScript:
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
    this.processAddressData = function(responseValues)
    {
        if (responseValues == null)
        {
            alert("Postcode onbekend!");
            self.addrBedrTr.style.display = "none";
            self.addrNaamTr.style.display = "none";
            self.addrStrtTr.style.display = "none";
            self.addrWoonTr.style.display = "none";
        }
        else
        {
            straat = responseValues.getElementsByTagName('straat')[0].childNodes[0].data;
            plaats = responseValues.getElementsByTagName('plaats')[0].childNodes[0].data;
            self.nummering = responseValues.getElementsByTagName('nummering')[0].childNodes[0].data;
            self.nummervan = responseValues.getElementsByTagName('huisnummerbereikstart')[0].childNodes[0].data;
            self.nummertot = responseValues.getElementsByTagName('huisnummerbereikeinde')[0].childNodes[0].data;

            // straatnaam invullen
            if (self.addrStrtTd_1.childNodes[1] == null)
            {
                self.addrStrtTd_1.appendChild(document.createTextNode(straat));
            }
            else
            {
                self.addrStrtTd_1.childNodes[1] = straat;
            }
            self.addrStrtInput_1.value = straat;
            //self.swapType(self.addrStrtInput_1, 'hidden');
            self.checkStraat(self.addrStrtInput_1);

            // plaatsnaam invullen
            if (self.addrWoonTd.childNodes[1] == null)
            {
                self.addrWoonTd.appendChild(document.createTextNode(plaats));
            }
            else
            {
                self.addrWoonTd.childNodes[1].value = plaats;
            }
            //self.swapType(self.addrWoonInput, 'hidden');
            self.addrWoonInput.value = plaats;
            self.checkWoonplaats();
            
            trows = self.addrTable.getElementsByTagName("tr");

            for (i=0; i<trows.length; i++)
            {
                try
                {
                    trows[i].style.display = "table-row";
                }
                catch (err)
                {
                    trows[i].style.display = "block";
                }
            }
        }
    }


swapType:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    // since IE doesn't even support dynamic swapping of input type we need this hack function
    this.swapType = function(obj, type)
    {
        // strip all attributes for the new object
        atts = obj.attributes;
        otherTypeObj = document.createElement("input");
        for (i=0; i<atts.length; i++)
        {
            if(atts[i].name != "type")
            {
                otherTypeObj.setAttribute(atts[i].name, atts[i].value);
            }
            else
            {
                otherTypeObj.setAttribute("type", type);
            }
        }
        obj_parent = obj.parentNode;
        obj_parent.replaceChild(otherTypeObj, obj);
    }


Ik denk niet dat het aan swapType ligt om heel eerlijk te zijn, omdat het wijzigen van de value zowel vooraf als achteraf het zelfde resultaat heeft.

iOS developer


  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Misschien snap ik het probleem niet helemaal, maar kun je niet gewoon via css display:none de input boxes onzichtbaar maken als dat nodig is?

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 24-11 23:24
zwippie schreef op donderdag 07 juni 2007 @ 14:50:
Misschien snap ik het probleem niet helemaal, maar kun je niet gewoon via css display:none de input boxes onzichtbaar maken als dat nodig is?
Dat werkt natuurlijk als een tierelier, oh mijn god de eenvoud :') d:)b

Maar mocht ik het toch ooit nodig gaan hebben (dynamisch van checkbox naar radio, of gewoon omdat ik wil dat hij ook verborgen is voor blinde surfers ;)), wat gaat er nou precies mis?

iOS developer


  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Geen idee wat er precies mis gaat. ;) In welke browser heb je het getest? Zit er misschien een fout in je DOM?

offtopic:
Geen verklaring ofzo, maar veel van dit soort JS 'gedoe' kun je ook heel leuk doen met jQuery. :)

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 24-11 23:24
zwippie schreef op donderdag 07 juni 2007 @ 15:16:
Geen idee wat er precies mis gaat. ;) In welke browser heb je het getest? Zit er misschien een fout in je DOM?

offtopic:
Geen verklaring ofzo, maar veel van dit soort JS 'gedoe' kun je ook heel leuk doen met jQuery. :)
Ik denk dat het probleem hier in zit:

JavaScript:
1
obj_parent.replaceChild(otherTypeObj, obj);


Deze methode zorgt er voor dat zaken in het script refereren naar nodes die weliswaar nog wel bestaan maar gereplaced zijn. Dus wat ik eigenlijk zoek is een manier om bvb self.addrWoonInput een verwijzing te laten worden naar dit nieuwe object, danwel het object vervangen waarnaar deze verwijst. Nu vervang ik hem weliswaar in de DOM, maar de JS verwijzing wordt niet vervangen.

iOS developer


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 24-11 23:24
JavaScript:
1
self.addrStrtInput_1 = self.swapType(self.addrStrtInput_1, 'hidden');


In combinatie met:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
this.swapType = function(obj, type)
    {
        // strip all attributes for the new object
        atts = obj.attributes;
        otherTypeObj = document.createElement("input");
        for (i=0; i<atts.length; i++)
        {
            if(atts[i].name != "type")
            {
                otherTypeObj.setAttribute(atts[i].name, atts[i].value);
            }
            else
            {
                otherTypeObj.setAttribute("type", type);
            }
        }
        return otherTypeObj;
    }


Werkt ook niet.

Hmm.

iOS developer

Pagina: 1