Luitjes,
Ter verduidelijking, ben bezig met een AJAX gericht CMS te maken. Hiervoor ben ik momenteel een tooltip aan het maken, hetzelfde idee als de title property van een HTML element, maar dan wat uitgebreider. (dik gedrukt, meerdere regels, etc) Heb dit gemaakt om te kijken of het ook echt werkte en dat deed het. Nu was de manier nogal omslachtig en niet echt netjes. Heb het geheel omgezet naar een tooltip class. Die ziet er als volgt uit:
In de body zit een onload die de functie init() aanroept. In deze init functie wordt een tooltip object aangemaakt. Tevens wordt hier het HTML element, aan de hand van een id, aangeroepen waar de tooltip op moet verschijnen. Op deze manier wil ik alle HTML events uit de statische HTML code halen om het geheel overzichtelijk en wat meer controleerbaar te houden. Het liefst houd ik ook het HTML element buiten de class, vandaar deze aanpak. Het HTML element id meegeven aan de tooltip class en de events intern regelen is een werkende optie, maar niet de mooiste.
Nu het probleem, het werkt niet. En waarom werkt het niet? Bij het laden van de pagina verschijnt er een error met de melding "this.div = null" en die komt uit regel 10 van de tooltip class. Ik vermoed dat de functie tooltip.show al eens aangeroepen wordt als deze wordt toegewezen aan het onmouseover event van het HTML element. Door wat te alert'en in de tooltip class komt er naar voren dat bij het aanmaken van de class het DIV met het id tooltip al schijnt te bestaan, terwijl die niet in de HTML code voorkomt. Er wordt dus (zoals te zien in het laatste if-statement) geen nieuw DIV aangemaakt, maar de huidige wordt gebruikt. Die, na het aanroepen van de tooltip class, ineens verdwenen is. Vandaar dat this.div in de tooltip class null is. Maar, waarom wordt het div met het id tooltip dan toch gevonden?
Waar-o-waar ga ik de fout in?
Ter verduidelijking, ben bezig met een AJAX gericht CMS te maken. Hiervoor ben ik momenteel een tooltip aan het maken, hetzelfde idee als de title property van een HTML element, maar dan wat uitgebreider. (dik gedrukt, meerdere regels, etc) Heb dit gemaakt om te kijken of het ook echt werkte en dat deed het. Nu was de manier nogal omslachtig en niet echt netjes. Heb het geheel omgezet naar een tooltip class. Die ziet er als volgt uit:
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
| function tooltip(id, text) { this.id = id; this.div = null; this.text = text; this.show = function(x, y) { // show div this.div.innerHTML = this.text; this.div.style.top = x + 23 + 'px'; this.div.style.left = y + 10 + 'px'; this.div.style.visibility = 'visible'; } this.hide = function() { // hide div this.div.innerHTML = ''; this.div.style.visibility = 'hidden'; } if(typeof(document.getElementById(this.id)) === 'object') { // exsisting div this.div = document.getElementById(this.id); } else { // new div this.div = document.createElement('div'); this.div.id = this.id; this.div.style.visibility = 'hidden'; try { // add div document.body.appendChild(this.div); } catch(e){} } } |
In de body zit een onload die de functie init() aanroept. In deze init functie wordt een tooltip object aangemaakt. Tevens wordt hier het HTML element, aan de hand van een id, aangeroepen waar de tooltip op moet verschijnen. Op deze manier wil ik alle HTML events uit de statische HTML code halen om het geheel overzichtelijk en wat meer controleerbaar te houden. Het liefst houd ik ook het HTML element buiten de class, vandaar deze aanpak. Het HTML element id meegeven aan de tooltip class en de events intern regelen is een werkende optie, maar niet de mooiste.
code:
1
2
3
4
5
6
7
8
9
| function init() { var tool = new tooltip('tooltip', TOOLTIP_SETTINGS); var sett = document.getElementById('settings'); sett.onmouseover = tool.show(); sett.onmouseout = tool.hide(); sett.onblur = sett.onmouseout; } |
Nu het probleem, het werkt niet. En waarom werkt het niet? Bij het laden van de pagina verschijnt er een error met de melding "this.div = null" en die komt uit regel 10 van de tooltip class. Ik vermoed dat de functie tooltip.show al eens aangeroepen wordt als deze wordt toegewezen aan het onmouseover event van het HTML element. Door wat te alert'en in de tooltip class komt er naar voren dat bij het aanmaken van de class het DIV met het id tooltip al schijnt te bestaan, terwijl die niet in de HTML code voorkomt. Er wordt dus (zoals te zien in het laatste if-statement) geen nieuw DIV aangemaakt, maar de huidige wordt gebruikt. Die, na het aanroepen van de tooltip class, ineens verdwenen is. Vandaar dat this.div in de tooltip class null is. Maar, waarom wordt het div met het id tooltip dan toch gevonden?
Waar-o-waar ga ik de fout in?
code:
1
2
3
| .. <a id='settings' href='#'>Instellingen</a> .. |
[ Voor 8% gewijzigd door Verwijderd op 03-02-2009 18:31 . Reden: Typo's.. deel 55! ]