[JS DOM] IE negeert attributen

Pagina: 1
Acties:

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Ik ben voor een klant bezig met een website, Een onderdeel daarvan is een treeview welke ik aan het uitwerken ben..

Deze treeview word dynamisch gegenereerd en geplaatst in het document; nu is het zo dat het in Firefox helemaal toppie werkt, maar Internet Explorer negeert alle onclick en onmouseover events die ik toegekent heb aan de verschillende nodes.

De relevante code is:
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
            treeFncImage = document.createElement("IMG");

            var cijfertje = Math.round((Math.random(0,14324)*100000));
            var link = document.createElement("A");
            link.setAttribute("href", "#");
            link.setAttribute("id", 'link'+cijfertje);
            link.setAttribute("onmousemove", 'alert(this.id);');
            
            if (items[i][5] && this.expanded == 0)
            {
                link.setAttribute("onclick", "Tree.act('"+cijfertje+"');");
                expImage = 'plus.png';
            }
            else if (items[i][5] && this.expanded == 1)
            {
                link.setAttribute("onclick", "Tree.act('"+cijfertje+"');");
                expImage = 'min.png';
            }
            else
            {
                expImage = 'blank.png';
            }

            treeFncImage.src = '/lib/i/'+expImage;
            treeFncImage.alt = '';
            treeFncImage.style.border = '0px';
            
            link.appendChild(treeFncImage);

            div.appendChild(link);


Als ik een
alert(link.outerHTML);
direct na de div.appendChild, dan staat daar de onclick event wel gewoon in.

Mijn vragen zijn dus: waarom negeert IE deze events, en wat kan ik doen om er voor te zorgen dat hij het wél doet.

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 05-05 16:30

RM-rf

1 2 3 4 5 7 6 8 9

bestaat het object Tree wel als globale variabele?

verder, het stukje Math.round((Math.random(0,14324)*100000)); genereert geen uniek getaal, hooguit een semi-ranbdom getal, waarom niet gewoon new Date().getTime()
Ik zou tevens geen aparte A genereren, maar gewoon een IMG met de events, als het om pure HTML-code ging die zelf verder benut wordt is dat misschien nuttig om correcte HTML op te zetten, maar nu wordt gewoon dynamisch de DOM opgebouwd, zonder verder opgeslagen te worden, dan werkt de snelste en eenvoudigste manier het effectiefst

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 05-05 14:58
Ik kwam deze toevallig een tijdje geleden tegen:
http://phpfreakz.nl/forum...rum=5&iid=637851#id643582

Gebruikt heel weinig JavaScript, een beetje CSS en is redelijk tot goed crossbrowser. Misschien kan je hier wel wat ideeen opdoen.

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
RM-rf schreef op donderdag 14 juli 2005 @ 10:41:
bestaat het object Tree wel als globale variabele?
Zeker:
code:
1
2
3
4
5
6
var Tree = new treeview();
Tree.draggable  = false;
Tree.dragtarget = true;
Tree.checkboxes = 0;
Tree.expanded   = 1;
Tree.create_tree(0, tree, 'structure_tree');
verder, het stukje Math.round((Math.random(0,14324)*100000)); genereert geen uniek getaal, hooguit een semi-ranbdom getal, waarom niet gewoon new Date().getTime()
Ik dacht dat de laatste ook niet snel genoeg zou zijn, tenzij hij milliseconden of meer teruggeeft. Bedankt voor de tip, desalniettemin is het aantal unieke keys niet bijzonder hoog dat er per tree vereist word.
[/quote]
Ik zou tevens geen aparte A genereren, maar gewoon een IMG met de events, als het om pure HTML-code ging die zelf verder benut wordt is dat misschien nuttig om correcte HTML op te zetten, maar nu wordt gewoon dynamisch de DOM opgebouwd, zonder verder opgeslagen te worden, dan werkt de snelste en eenvoudigste manier het effectiefst
Dat is iets dat stamt uit een eerdere fase. Ik zal het direct veranderen, want je hebt gelijk.

Hiermee is het probleem helaas niet verholpen.
djluc schreef op donderdag 14 juli 2005 @ 10:46:
Ik kwam deze toevallig een tijdje geleden tegen:
http://phpfreakz.nl/forum...rum=5&iid=637851#id643582

Gebruikt heel weinig JavaScript, een beetje CSS en is redelijk tot goed crossbrowser. Misschien kan je hier wel wat ideeen opdoen.
Er zit aardig wat functionaliteit in de Tree wat hard nodig is, zoals dragfunctionaliteit en on the fly dynamisch nodes verwijderen/toevoegen. Daarom is er gekozen voor een zelfgebrouwen oplossing

[ Voor 20% gewijzigd door GX op 14-07-2005 10:48 ]


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 05-05 14:58
Heb je misschien een linkje zodat ik de code kan checken in de dom-inspector?

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
Het is intern, dus helaas nee.

De DOM-inspector van Firefox doet het overigens prima op die site. Beter nog, de hele site werkt in firefox én opera, maar in Internet Explorer niet.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Waarom niet gewoon DOM1?

JavaScript:
1
2
3
4
5
6
7
8
9
10
var tmp = document.getElementById('BtM909');
var linkje = document.createElement("a");

linkje.href    = 'http://Gathering.Tweakers.net';
linkje.id      = 'BtM909_Link';
linkje.title   = "Link to this section";
linkje.onclick = function(){ alert('test') };

linkje.appendChild(document.createTextNode('Administration'));
tmp.appendChild(linkje);


link is overigens een JS-reserved woord, maar lijkt wel te werken. Ik neem alleen geen onnodige risico's ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
BtM909 schreef op donderdag 14 juli 2005 @ 11:18:
Waarom niet gewoon DOM1?

link is overigens een JS-reserved woord, maar lijkt wel te werken. Ik neem alleen geen onnodige risico's ;)
link is inmiddels weg, en zit de onclick event op de image. Maar ook deze methode heeft geen resultaat.

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

crisp

Devver

Pixelated

events zijn feitelijk iets anders dan attributen, ook in DOM.
Voor het toekennen van events kan je addEventListener gebruiken (DOM level 2) - setAttribute is daar niet voor bedoelt.

Aangezien IE het DOM level 2 event-model niet ondersteund zou je nog kunnen terugvallen op DOM 1:
JavaScript:
1
2
3
element.onclick = foo;
// of met een anonieme functie:
element.onclick = function() { foo(); }

Intentionally left blank


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
crisp schreef op donderdag 14 juli 2005 @ 11:23:
events zijn feitelijk iets anders dan attributen, ook in DOM.
Voor het toekennen van events kan je addEventListener gebruiken (DOM level 2) - setAttribute is daar niet voor bedoelt.
Dan is het maar vieze code, het werkt nu onder de meeste browsers :P
Aangezien IE het DOM level 2 event-model niet ondersteund zou je nog kunnen terugvallen op DOM 1:
JavaScript:
1
2
3
element.onclick = foo;
// of met een anonieme functie:
element.onclick = function() { foo(); }
En dat weigert dus (zie post hierboven)

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

GX schreef op donderdag 14 juli 2005 @ 11:25:
[...]

Dan is het maar vieze code, het werkt nu onder de meeste browsers :P

[...]

En dat weigert dus (zie post hierboven)
Waarom werkt mijn code wel? Laat eens nu je code zien :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
BtM909 schreef op donderdag 14 juli 2005 @ 11:27:
[...]

Waarom werkt mijn code wel? Laat eens nu je code zien :)
Geen idee? :P

code:
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
            treeFncImage = document.createElement("IMG");

            var cijfertje = Math.round((Math.random(0,14324)*100000));
            
            treeFncImage.setAttribute("id", 'link'+cijfertje);
            treeFncImage.setAttribute('cijfer', cijfertje);
            
            if (items[i][5] && this.expanded == 0)
            {
                treeFncImage.onclick = function() { Tree.act(this.cijfer); }
                expImage = 'plus.png';
            }
            else if (items[i][5] && this.expanded == 1)
            {
                treeFncImage.onclick = function() { Tree.act(this.cijfer); }
                expImage = 'min.png';
            }
            else
            {
                expImage = 'blank.png';
            }

            treeFncImage.src = '/lib/i/'+expImage;
            treeFncImage.alt = '';
            treeFncImage.style.border = '0px';


Ik corrigeer mijn post hierboven,
code:
1
image.onclick = function() { zut(); }
werkte wél. Vieze omweg, maar het zij zo.

Dank :Y)

[ Voor 7% gewijzigd door GX op 14-07-2005 11:37 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

JavaScript:
1
image.onclick = zut;

werkt ook gewoon ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


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

crisp

Devver

Pixelated

JavaScript:
1
treeFncImage.onclick = new Function('Tree.act(' + cijfertje + ');');

Intentionally left blank


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025
BtM909 schreef op donderdag 14 juli 2005 @ 11:41:
JavaScript:
1
image.onclick = zut;

werkt ook gewoon ;)
Als dat waar was - in dit geval - had ik dit topic niet geopend ;)
Toegegeven, normaal werkt 't wel, waarom nu niet snap ik nog steeds niet.
crisp schreef op donderdag 14 juli 2005 @ 11:42:
JavaScript:
1
treeFncImage.onclick = new Function('Tree.act(' + cijfertje + ');');
Ook een manier. Danku
Pagina: 1