Newsgroup: it.comp.lang.javascript
Titolo: [IE6] self punta a window: bug?

Mi chiedevo da tempo perche' un mio script non funzionasse sotto IE. Dal
momento che non me ne puo' fregare di meno, non l'ho mai tentato di capire.
Oggi che ho un paio d'ore di tempo anche per compassione verso l'utenza IE
ho deciso di approfondire.
Ometto il codice irrilevante. Nella funzione:
var li_items =
document.getElementById("tree-container").getElementsByTagName("li");
for (var i = 0; i < li_items.length; i++)
{ 
  if (window.attachEvent)
  {
    li_items[i].attachEvent("onclick", toggle_children_list_items);
  }
}
function toggle_children_list_items(e) 
{
  evt = e || event;
//...
  alert(this == window);
// IE6: true
// io: maccheddiav... o__O;;
}
l'hack per risolverlo e' quasi ovvio (usare una variabile
var src = (this == window) ? evt.srcElement : this;
resta lo sbigottimento per questa scoperta :(((
-- 
http://emeraldion.it

 resta lo sbigottimento per questa scoperta :(((
Posso capire lo "sbigottimento" per chi è abituato a usare
l'addEventListener, ma l'attachEvent è tutt'altra cosa. L'evento viene
eseguito in modo decontestualizzato, come accade per il
setTimeout/setInterval, o in modo simile all'onreadystatechange dell'oggetto
XMLHttpRequest; quindi il "this" è relativo alla finestra stessa in IE (in
quanto il contesto della funzione è la window).
Differentemente, invece, sarebbe se tu non usassi l'attachEvent:
li_items[i].onclick = toggle_children_list_items;
In tal caso associ a "onclick" il riferimento alla funzione
"toggle_children_list_items".
Quindi:
	toggle_children_list_items() 	// this -> window
	li_items[0].onclick();		// this -> li_items[0]
Non credo di averti detto niente di nuovo, ma ho cercato cmq di approfondire
la questione.. benché in verità ci sia poco da approfondire. :)
L'implementazione di attachEvent è quella.
-- 
~ Il lavoro è quel lasso di tempo che intercorre tra una pausa caffè e
l'altra.

 L'implementazione di attachEvent è quella.
gia'. Ma ti ripeto, limitatamente a quello script, per me e' sufficiente
che non si pensi da parte dell'utenza IE che sia un imbecille :))
A proposito. Un po' in ritardo, auguro buon anno a te e ai frequentatori
di ICLJ ;)
-- 
http://www.emeraldion.it
«La pistola ti rende nervoso?»
«Sono gli idioti con la pistola che mi rendono nervoso»
(C. Bronson, Il giustiziere della notte)

 di ICLJ ;)
Mi accondo anche io, visto che anche io sono stato latitante durante queste
feste; sono giusto tornato or ora. :)
-- 
~ It may be that the old astrologers had the truth exactly reversed,
when they believed that the stars controlled the destinies of men.
The time may come when men control the destinies of stars. (Arthur C.
Clarke)

 feste; sono giusto tornato or ora. :)
consentimi di sfoggiare la nuova sign :))
-- 
http://www.emeraldion.it
«Deformazione professionale è quando Steve Jobs durante il Keynote
presenta l'iPhone, e tu ti chiedi se ci puoi sviluppare in J2ME»
(liberamente adattata da una sign di Zer0)

 (liberamente adattata da una sign di Zer0)
Beh, in quel contesto non è deformazione professionale, è un dubbio lecito
direi! :D
P.S.
Purtroppo non è ancora in vendita, altrimenti ci avrei fatto un pensierino
sull' iPhone. :) Aspetterò...
-- 
~ "Se un uomo non è disposto a lottare per le sue idee, o le sue idee
non valgono nulla o non vale niente lui."
(Ezra Pound)

 (Ezra Pound)
oppure se le esprime lo impallinano ... 
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.