Ik ben me weer eens gaan wagen aan Javascript, maar ik had me natuurlijk van tevoren moeten bedenken dat IE weer moeilijk zou gaan doen. Maar goed, ik ben nu begonnen dus ik wil het ook afmaken.
Het probleem: Bij het laden van een pagina staat daar een tabel met een aantal rijen. Aan het eind van deze rijen staat twee buttons: + en - (iTunes-gebruikers kennen het wel van de smart playlists). De plus voegt een rij toe aan de tabel ná de rij waarin de button staat waarop geklikt is, de min haalt die rij weg.
Toevoegen gebeurt door middel van een functie in het onClick-event: addOption(index). De index is hierbij het rijnummer zodat ik met getElementsByTagName('tr')[index] de rij gemakkelijk op kan zoeken in addOption(). Verwijderen gebeurt op een gelijksoortige manier: removeOption(index).
Ik ben aan de slag gegaan met het DOM-object en heb daar een paar mooie functies voor gemaakt die uiteindelijk leiden tot wat ik wil. Althans, in Firefox. IE heeft er niet zo'n zin in. De functie waar het hier omgaat is denk ik mijn reIndex()-functie.
Deze zorgt dat, na het toevoegen of verwijderen, de onclick-events van alle buttons weer kloppen (immers, bij het toevoegen van een rij midden in de tabel kloppen de indexnummers van de rijen daarna niet meer).
Echter, er gebeurt nu niets. Ik kan een rij toevoegen, maar de plus- en min-knoppen van die rij doen het niet. Ook het verwijderen van de toegevoegde rijen lukt niet, van de rijen die bij het laden van de pagina al aanwezig waren wel.
Omdat Internet Explorer geen foutmeldingen geeft, kan ik niet zoveel. Uiteraard heb ik gezocht: setAttribute lijkt niet echt lekker geïmplementeerd te zijn, maar setAttribute('onClick') zou het wel moeten doen (waar setAttribute('onclick') het in IE niet doet en in Firefox wel). Ik heb ook met attachEvent gewerkt, maar dat gaf hetzelfde resultaat als nu. Ik heb ook al gecontroleerd wat de waardes van de onClick-events zijn, maar kloppen gewoon (ook na toevoegen/verwijderen van rijen).
De pagina waar het omgaat heb ik online gezet zodat het misschien duidelijker wordt wat ik bedoel. De pagina werkt in Firefox dus precies zoals ik wil, in IE niet. Mocht het nodig zijn, dan kan ik ook de addOption- en removeOption-functies hier neerzetten, maar die zijn nogal groot en ik denk dat ze niet heel erg belangrijk zijn.
Een hele lap tekst, maar weet hier iemand wat ik fout doe of anders moet doen zodat het zowel in Firefox als Internet Explorer werkt ? Alvast bedankt
Het probleem: Bij het laden van een pagina staat daar een tabel met een aantal rijen. Aan het eind van deze rijen staat twee buttons: + en - (iTunes-gebruikers kennen het wel van de smart playlists). De plus voegt een rij toe aan de tabel ná de rij waarin de button staat waarop geklikt is, de min haalt die rij weg.
Toevoegen gebeurt door middel van een functie in het onClick-event: addOption(index). De index is hierbij het rijnummer zodat ik met getElementsByTagName('tr')[index] de rij gemakkelijk op kan zoeken in addOption(). Verwijderen gebeurt op een gelijksoortige manier: removeOption(index).
Ik ben aan de slag gegaan met het DOM-object en heb daar een paar mooie functies voor gemaakt die uiteindelijk leiden tot wat ik wil. Althans, in Firefox. IE heeft er niet zo'n zin in. De functie waar het hier omgaat is denk ik mijn reIndex()-functie.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <script> function reIndex() { tbody = document.getElementById('multiple_options').getElementsByTagName('tbody')[0]; rows = tbody.getElementsByTagName('tr'); for (var i = 0; i < rows.length; i++) { cells = rows[i].getElementsByTagName('td'); option = cells[0].getElementsByTagName('input')[0]; remove = cells[1].getElementsByTagName('input')[0]; add = cells[2].getElementsByTagName('input')[0]; option.setAttribute('name', 'option['+ i +']'); remove.setAttribute('onClick', 'removeOption(' + i +')'); add.setAttribute('onClick', 'addOption(' + i + ')'); } } </script> |
Deze zorgt dat, na het toevoegen of verwijderen, de onclick-events van alle buttons weer kloppen (immers, bij het toevoegen van een rij midden in de tabel kloppen de indexnummers van de rijen daarna niet meer).
Echter, er gebeurt nu niets. Ik kan een rij toevoegen, maar de plus- en min-knoppen van die rij doen het niet. Ook het verwijderen van de toegevoegde rijen lukt niet, van de rijen die bij het laden van de pagina al aanwezig waren wel.
Omdat Internet Explorer geen foutmeldingen geeft, kan ik niet zoveel. Uiteraard heb ik gezocht: setAttribute lijkt niet echt lekker geïmplementeerd te zijn, maar setAttribute('onClick') zou het wel moeten doen (waar setAttribute('onclick') het in IE niet doet en in Firefox wel). Ik heb ook met attachEvent gewerkt, maar dat gaf hetzelfde resultaat als nu. Ik heb ook al gecontroleerd wat de waardes van de onClick-events zijn, maar kloppen gewoon (ook na toevoegen/verwijderen van rijen).
De pagina waar het omgaat heb ik online gezet zodat het misschien duidelijker wordt wat ik bedoel. De pagina werkt in Firefox dus precies zoals ik wil, in IE niet. Mocht het nodig zijn, dan kan ik ook de addOption- en removeOption-functies hier neerzetten, maar die zijn nogal groot en ik denk dat ze niet heel erg belangrijk zijn.
Een hele lap tekst, maar weet hier iemand wat ik fout doe of anders moet doen zodat het zowel in Firefox als Internet Explorer werkt ? Alvast bedankt