[JS] Probleem met Internet Explorer en Safari.

Pagina: 1
Acties:

  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
Ik heb de volgende code (het element completeDiv is dmv DOM gemaakt):

code:
1
2
3
4
5
6
7
8
9
var completeDiv = document.createElement("DIV");

if (isExplorer()) {
    completeDiv.setAttribute("onmouseover", function anonymous(){acOver = true;});
    completeDiv.setAttribute("onmouseout", function anonymous(){acOver = false;});
} else { 
    completeDiv.setAttribute("onmouseover", "acOver = true;");
    completeDiv.setAttribute("onmouseout", "acOver = false;");
}


In internet explorer is het namelijk niet mogelijk om dit te doen:

code:
1
2
    completeDiv.setAttribute("onmouseover", "acOver = true;");
    completeDiv.setAttribute("onmouseout", "acOver = false;");


Dit omdat hij het wel plaatst maar hij gaat het niet gebruiken in 'runtime' zegmaar.

In work arround is volgens de site: http://www.pxl8.com/setAttribute_test.html om het op de volgende manier te doen:

code:
1
2
    completeDiv.setAttribute("onmouseover", function anonymous(){acOver = true;});
    completeDiv.setAttribute("onmouseout", function anonymous(){acOver = false;});


Dan gaat het wel werken en dit klopt. Maar nu het probleem Safari voert het volgende uit:

code:
1
2
    completeDiv.setAttribute("onmouseover", "acOver = true;");
    completeDiv.setAttribute("onmouseout", "acOver = false;");


Dit zou moeten werken,
maar doordat het eerste deel voor internet explorer erin staat gaat safari helemaal niet meer goed werken (hij voert de javascript helemaal niet meer uit),

Als ik de twee regels be-commentarieer dan gaat het wel allemaal goed in safari:

code:
1
2
3
4
5
6
7
8
9
var completeDiv = document.createElement("DIV");

if (isExplorer()) {
    // completeDiv.setAttribute("onmouseover", function anonymous(){acOver = true;});
    // completeDiv.setAttribute("onmouseout", function anonymous(){acOver = false;});
} else { 
    completeDiv.setAttribute("onmouseover", "acOver = true;");
    completeDiv.setAttribute("onmouseout", "acOver = false;");
}


Is er nog een andere manier om dit voor elkaar te krijgen zodat Safari er geen problemen mee heeft? (Safari is trouwens versie 1.2).

[ Voor 12% gewijzigd door ronaldmathies op 31-12-2004 17:31 ]

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line


Verwijderd

Op die manier een event-listener aan een element koppelen is best ranzig te noemen.

Dit is de juiste manier, door gebruikt te maken van methoden die daarvoor bedoeld zijn.

Let op: er staat alleen java voor de syntaxhighlighting!!!
Java:
1
2
3
4
5
6
7
8
9
10
11
12
function handleOver(e) { acOver = true; }
function handleOut(e) { acOver = false; }

var completeDiv = document.createElement("DIV");

try {
  completeDiv.addEventListener('mouseover', handleOver, false);
  completeDiv.addEventListener('mouseover', handleOut, false);
} catch(inferiorBrowserException) { // Copyright: Clay :D
  completeDiv.attachEvent('onmouseover', handleOver);
  completeDiv.attachEvent('onmouseover', handleOut;
}


meer meer meer! Ik wil meer!!!11
Nuttige documentatie over "event registration"
Events en compatibiliteit

[ Voor 82% gewijzigd door Verwijderd op 31-12-2004 19:19 ]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Of als je het echt zonder browserdetection overal werkend wilt hebben:
JavaScript:
1
2
completeDiv.onmouseover = function() { acOver = true; }
completeDiv.onmouseout = function() { acOver = false; }

Het IE5 eventmodel is sowieso iets waar je ver van weg wilt blijven ;)

Oh ja, dit hoort dus in Webdesign & Graphics

[ Voor 8% gewijzigd door crisp op 01-01-2005 03:03 ]

Intentionally left blank


  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
Ik was toch echt in de veronderstelling dat dit onder Programming en Webscripting hoorde maar oke.

Bedankt voor de reacties zover, en ik zal zeker even kijken naar de reacties die ik tot nu toe heb gekregen. Heb in iedergeval weer genoeg leesvoer zeg maar.

P.s.

Graag nog geen slotje ivm mogelijke komende vragen als gevolg van het doorgelezen leesvoer zeg maar.

[ Voor 18% gewijzigd door ronaldmathies op 01-01-2005 16:18 ]

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line


  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op vrijdag 31 december 2004 @ 19:06:
Op die manier een event-listener aan een element koppelen is best ranzig te noemen.

Dit is de juiste manier, door gebruikt te maken van methoden die daarvoor bedoeld zijn.

Let op: er staat alleen java voor de syntaxhighlighting!!!
Java:
1
2
3
4
5
6
7
8
9
10
11
12
function handleOver(e) { acOver = true; }
function handleOut(e) { acOver = false; }

var completeDiv = document.createElement("DIV");

try {
  completeDiv.addEventListener('mouseover', handleOver, false);
  completeDiv.addEventListener('mouseover', handleOut, false);
} catch(inferiorBrowserException) { // Copyright: Clay :D
  completeDiv.attachEvent('onmouseover', handleOver);
  completeDiv.attachEvent('onmouseover', handleOut;
}


meer meer meer! Ik wil meer!!!11
Nuttige documentatie over "event registration"
Events en compatibiliteit
Een correctie op jouw script, want zoals deze boven neergezet is gaat deze niet werken:

Let op: er staat alleen java voor de syntaxhighlighting!!!
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function handleOver() { 
    acOver = true; 
}

function handleOut() { 
    acOver = false; 
}

var completeDiv = document.createElement("DIV");

try {
    completeDiv.addEventListener('mouseover', handleOver, false); 
    completeDiv.addEventListener('mouseout', handleOut, false); 
} catch(inferiorBrowserException) {
    completeDiv.attachEvent('onmouseover', handleOver); 
    completeDiv.attachEvent('onmouseout', handleOut); 
}

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line


Verwijderd

Misschien is het nog de brakheid van Oud&Nieuw, maar ik zie compleet niet wat je aan mijn stuk code veranderd hebt. Ik zie ook niet echt in waarom mijn code niet zou werken...

  • Koeniepoenie
  • Registratie: Oktober 2003
  • Laatst online: 18-05 10:29
Verwijderd schreef op zondag 02 januari 2005 @ 14:24:
Misschien is het nog de brakheid van Oud&Nieuw, maar ik zie compleet niet wat je aan mijn stuk code veranderd hebt. Ik zie ook niet echt in waarom mijn code niet zou werken...
Er mistte een haakje op de een-na-laatste regel :)

Parse error: syntax error, unexpected GOT_USER in https://gathering.tweakers.net on line 1337


Verwijderd

Koeniepoenie _/-\o_

/me is officieel brak

offtopic:
ronaldmathies: topics worden alleen dichtgegooid als dat echt noodzakelijk is. js is client-side scripting en willen ze hier hebben.

  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
Quist:
Het was niet als afkraken bedoeld hoor :-) maar meer dat als andere mensen dit topic gaan lezen ze niet eerst elke keer zelf dat haakje moeten vinden.

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line

Pagina: 1