Het volgende stukje code dat door alle elementen in een formulier heen loopt en de waarden van de name en value attributen in een nieuw object genaamd data plaatst. Het is een triviaal stukje code wat in iedere moderne browser probleemloos werkt. Mijn verbazing was dan ook groot toen ik het ging testen in een obscure browser genaamd "Internet Explorer" die heden ten dage door een aanzienlijke groep mensen wordt gebruikt om redenen die mij niet helemaal duidelijk zijn.
Het uitvoeren van het bovenstaande code geeft in Internet Explorer de volgende foutmelding, waarna de uitvoering van het script ook direct stopt:
Nu ben ik er zelf vrij zeker van dat alle elementen een name attribuut hebben, maar om er helemaal zeker van te zijn wordt er op regel 7 nog gecontroleerd of deze wel echt bestaat. Internet Explorer gaat door deze check heen en klaagt vervolgens dat deze toch niet bestaat.
Een korte zoektocht op het internet leert mij dat dit probleem waarschijnlijk wordt veroorzaakt door het feit dat het formulier myForm niet aanwezig was op de pagina op het moment dat deze werd geladen, maar later met behulp van JavaScript in de pagina is geplaatst. Een van de vele eigenaardigheden van Internet Explorer is om in dat geval de name-attributen niet op te nemen in het DOM, waardoor ze dus niet te benaderen zijn via JavaScript.
Nu heb ik al diverse creatieve, doch ranzige oplossing voor dit probleem proberen te vinden. Maar wat blijkt? Ook het uitlezen van het type en value attribuut geeft de waarde "undefined" waardoor het wel erg lastig wordt om bruikbare informatie uit de formuliervelden te ontrekken. Gek genoeg staan wel alle elementen in de lijst en worden en komen ze in de for-loop allemaal aan de beurt, alleen kan ik er niks mee.
Nu is mijn hoop dat er hier iemand is die vaker met dit bijltje heeft gehakt en me kan helpen met dit probleem ten behoeve van de ons zo geliefde Internet Explorer gebruikers.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
| var data = {}; for(i in document.forms['myForm'].elements) { var el = document.forms['myForm'].elements[i]; if(el.name && el.value) { data[el.name] = el.value; } } |
Het uitvoeren van het bovenstaande code geeft in Internet Explorer de volgende foutmelding, waarna de uitvoering van het script ook direct stopt:
code:
1
| Regel: 9; Fout: 'name' is leeg of geen object. |
Nu ben ik er zelf vrij zeker van dat alle elementen een name attribuut hebben, maar om er helemaal zeker van te zijn wordt er op regel 7 nog gecontroleerd of deze wel echt bestaat. Internet Explorer gaat door deze check heen en klaagt vervolgens dat deze toch niet bestaat.
Een korte zoektocht op het internet leert mij dat dit probleem waarschijnlijk wordt veroorzaakt door het feit dat het formulier myForm niet aanwezig was op de pagina op het moment dat deze werd geladen, maar later met behulp van JavaScript in de pagina is geplaatst. Een van de vele eigenaardigheden van Internet Explorer is om in dat geval de name-attributen niet op te nemen in het DOM, waardoor ze dus niet te benaderen zijn via JavaScript.
Nu heb ik al diverse creatieve, doch ranzige oplossing voor dit probleem proberen te vinden. Maar wat blijkt? Ook het uitlezen van het type en value attribuut geeft de waarde "undefined" waardoor het wel erg lastig wordt om bruikbare informatie uit de formuliervelden te ontrekken. Gek genoeg staan wel alle elementen in de lijst en worden en komen ze in de for-loop allemaal aan de beurt, alleen kan ik er niks mee.
Nu is mijn hoop dat er hier iemand is die vaker met dit bijltje heeft gehakt en me kan helpen met dit probleem ten behoeve van de ons zo geliefde Internet Explorer gebruikers.
Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.