Toon posts:

[js]AttachEvent werkt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
http://www.drunk.nl/tweakers/attach/

Ik heb het voorbeeldje maar even online gegooid, Heb eigenlijk nog niet zoveel gewerkt met attachEvent, maar heb het nu even nodig, in Mozilla werkt het wel zoals ik wil, maar IE weigert gewoon de achtergrondkleur aan te passen.

Wie o wie weet wat ik fout doe. :)

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Hier was laatst al een topic over:

[rml][ JS DOM] attachEvent probleem[/rml]

Resultaat is dat het makkelijker (en compatibeler) is om direct de functie aan het event te koppelen ipv via attachEvent of eventListeners.

Verwijderd

Weet niet of het daaraan ligt (heb ff geen zin om te testen) maar de getElementsByTagName geeft geen Array maar een Collection terug.
Daar mag je dus eigenlijk niet met de [ ] operators doorheen loopen, maar daar moet je de .item( ) methode voor gebruiken.
JavaScript:
1
2
3
4
5
6
7
for (var i=0; i < kids.length; i++) {
    var oKid = kids.item(i);
    if(document.addEventListener)
        oKid.addEventListener("mouseout", yup, true); // Moz
    else if(window.attachEvent)
        oKid.attachEvent("onmouseout", yup); // IE
}

Verwijderd

Topicstarter
mm ok, beiden bedankt. Blues het resultaat blijft echter hetzelfde, IE blijft weigeren, waar Mozilla het wel doet. Ik heb het echter wel opgelost door te doen wat het Monster aanrade.

Verwijderd

Het probleem is dat de this die je in yup gebruikt niet wijst naar de DIV, maar naar de document.body...het element waar het event naartoe bubbelt. Ik heb wat expirimentjes gedaan met window.event.cancelBubble en return false, maar het mocht niet baten.

Ik weet het ook niet meer :P

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 21-08 10:46
Misschien denk ik te simpel maar waarom doe je niet gewoon dit (wat wel werkt):

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function init() {
    kids = document.getElementsByTagName('div');
    for (var i=0; i < kids.length; i++) {
        kids[i].onmouseout = yup;
    }
}

function yup() {
    if ( ( this.id == "weg1" ) || ( this.id == "weg2" ) || ( this.id == "weg3" ) ) {
        this.style.backgroundColor='#ff0000';
    }
}  
onload=init;


Ik zou trouwens als ik jou was een array maken met ID's van DIVjes die wel gemouseovert mogen worden want ik dit geval krijgen de DIV's waar je eigenlijk geen onmouseover aan wil hangen ook een event.

Dit lijkt me dus beter:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function init() {
    ids = Array( "weg1", "weg2", "weg3" );

    for( var i=0; i < ids.length; i++ ) {
        document.getElementById( ids[i] ).onmouseout = yup;
        
        // Of nog korter:
        // document.getElementById( ids[i] ).onmouseout = function() {  this.style.backgroundColor = "#ff0000"; }
    }
}

function yup() {
    this.style.backgroundColor='#ff0000';
}  
window.onload=init;

Verwijderd

McVirusS schreef op 03 juni 2003 @ 13:15:
Misschien denk ik te simpel maar waarom doe je niet gewoon dit (wat wel werkt):
Je hebt wel gelijk, maar ik kan er eerlijk gezegd niet zo goed tegen dat ik die andere manier niet gefikst krijg! ;(

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 21-08 10:46
Verwijderd schreef op 03 June 2003 @ 14:18:
[...]

Je hebt wel gelijk, maar ik kan er eerlijk gezegd niet zo goed tegen dat ik die andere manier niet gefikst krijg! ;(
Ja snap ik; zo ben ik ook ;). Maar zoals ik het nu doe is ook niet "fout" of zo dus lijkt me voor nu een goede oplossing ;).

Verwijderd

Topicstarter
Bedankt McVirusS e.a. :) heb de ID's nu allemaal in een array gegooid en dat werkt prima, ik denk af en toe gewoon te moeilijk.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

sowieso wat efficienter dan door de hele tagname collectie lopen en er maar 3 van gebruiken :)

Verwijderd

Topicstarter
dat was maar een voorbeeldje het gaat uiteindelijk om 16 id's.

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 21-08 10:46
Speciaal voor Blues ;) >:).

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function init() {
    ids = Array( "weg1", "weg2", "weg3" );

    for( var i=0; i < ids.length; i++ ) {
        if(document.addEventListener) {
            document.getElementById( ids[i] ).addEventListener( "mouseout", yup, false ); // Moz
        } else if(window.attachEvent) {
            document.getElementById( ids[i] ).attachEvent( "onmouseout", yup ); // IE
        }
    }
}

function yup(e) {
    el = (e.currentTarget) ? e.currentTarget : event.srcElement;
    el.style.backgroundColor = "#ff0000";
}

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 21-08 10:46
Verwijderd schreef op 03 June 2003 @ 14:57:
dat was maar een voorbeeldje het gaat uiteindelijk om 16 id's.
Voordeel van een Array is dat je deze makkelijk automatisch kan uitbreiden en dergelijke :). Stukken dynamischer.
Pagina: 1