Newsgroup: it.comp.lang.javascript
Titolo: event con Mozilla

č possibile emulare le funzionalitŕ dell'oggetto event con Mozilla?
mi servirebbe per questo tipo di operazione :
	var el    = event.srcElement;
grazie a tutti!!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 	var el    = event.srcElement;
Nessun bisogno di emulare: in Mozilla esiste lo stesso oggetto.
Due "NOTA BENE":
- alcune proprieta' sono diverse da quelle fornite da ie e non tutte le 
proprieta' hanno corrispondenze nell'altro browser.
Nel tuo caso srcElement diventa target nei browser Gecko.
- in caso di event handler nel codice html ricorda che i browser Gecko 
pretendono che l'oggetto event sia passato esplicitamente a tue 
eventuali funzioni (cosa che ie non richiede).
Esempio crossbrowser:
<script type="text/javascript">
	function tuaFunzione(e){
		e=e||event;
		alert(e.type);
	}
</script>
<a href="#" onclick="return tuaFunzione(event)">prova</a>

 <a href="#" onclick="return tuaFunzione(event)">prova</a>
?!?
Perche' non basta fare:
function tuaFunzione(e)
{
    alert(e.type);
}
visto che poi passi l'event come parametro...

 visto che poi passi l'event come parametro...
Distrazione per la mia perenne fretta, e in verita' manca anche un bel 
"return false" alla fine...
La riga incriminata "e=e||event" serviva in realta' per un terzo esempio 
che non ho fatto.
Rimedio ora.
Quando l'event handler e' nel codice javascript:
document.onmousedown=function(e){e=e||event;alert(e.type);}
In questo caso siamo costretti a questo tipo di scrittura: ie non 
"passa" alcun parametro, ma rende direttamente disponibile l'oggetto.

purtroppo in questa maniera non funziona, almeno col target, quello che
sto facendo io è la seguente cosa:
ho una funzione che mi scorre gli elementi del mio documento, dove el il
valore
passato corrisponde a un oggetto del documento (
document.getElementsByTagName("INPUT")[i] )
function SetField(el)
{
	el.onfocus    = _CheckOnFocus;
}
nella funzione _CheckOnFocus ho la seguete cosa :
function _CheckOnFocus()
{			
   var el    = event.srcElement;
   alert("nome " + 
el.name
)
   alert("valore " + el.value)
}
ma con event.srcElement tutto funziona bene in IE, mentre in Mozilla non
va
e sostituendo srcElement con target non fa nulla... dove sbaglio?
grazie, a tutti.


 e sostituendo srcElement con target non fa nulla...
Ma, te l'ha appena spiegato lo Scartabelli:
function inizializza()
{
 for(var i=0;i<document.getElementsByTagName("INPUT").length;++i)
  SetField(document.getElementsByTagName("INPUT")[i]);
}
function SetField(el)
{
 el.onfocus  = _CheckOnFocus;
}
function _CheckOnFocus(e)
{
 var e=e||event;
// if(!e) return;
 var el = e.srcElement||e.target;
// if(!el) return;
 alert("nome " + 
el.name
)
 alert("valore " + el.value)
}
In fine visto che si sta parlando degli elementi di un tuo form io
userei piu' una cosa cosi' (dovrebbe essere piu' cross-browser):
 for(var i=0,el=null;i<document.forms[0].elements.length;++i){
  el=document.forms[0].elements[i];
  if(el.type=='text')//ci metti i tipi che vuoi
   SetField(el);
 }

ok, così è perfetto è che sbagliavo, non mettevo queste due stringhe :
var e=e||event;
var el = e.srcElement||e.target;
è che a dir la verità non capisco cosa voglia dire una sintassi con i
due
|| tipo questa e.srcElement||e.target...


 || tipo questa e.srcElement||e.target...
Sempre di fretta: purtroppo saro' brevissimo.
Diciamo che si sfrutta un comportamento di javascript.
L'operatore || e' l'or logico e risulta piuttosto utile in questi 
frangenti. Se scriviamo a=b||c assegniamo ad a il valore che non puo' 
essere tramutato in "false" (se presente) tra quelli dei suoi operandi.
Ci sarebbe da approfondire parecchio e va usato con attenzione; nel 
frattempo puoi tradurre questa riga
var el = e.srcElement||e.target;
come "se esiste la proprieta' srcElement di e la assegno ad el, 
altrimenti assegno ad el la proprieta' target".
E se non esiste nessuna delle due? Altro spunto per approfondire.