Newsgroup: it.comp.lang.javascript
Titolo: oggetto.onclick= "funzione()";

Ho tratto il seguente script dal sito di Microsoft:
http://msdn.microsoft.com/workshop/author/om/event_model.asp
<html>
<head><title>Untitled</title></head>
<body>
<H1 id="MyHeading">Welcome!</H1>
<SCRIPT LANGUAGE="JavaScript">
function setHeadStyle() {
    window.event.srcElement.style.color = "green";
}
document.all.MyHeading.onclick= "setHeadStyle()";
</SCRIPT>
</body>
</html>
Con il mio MSIE5.00 Windows98  quando clicco
sopra "Welcome !"   la scritta non cambia colore
come invece dovrebbe. Mentre con:
document.all.MyHeading.onclick= setHeadStyle;
funziona tutto bene come gia' risaputo.
La sintassi usata nell'esempio di Microsoft mi sarebbe
utile per impostare un evendo richiamando una funzione
passandogli un valore in questo modo:
object.onclick = "mia_funzione(il_mio_valore)";
o sarebbe comodo anche:
object.onmouseover = "this.style.color='red'";
Perche' non funziona ? E su MSIE 5.5 o 6 ?
Oppure esiste un sistema per passare un valore ad una
funzione con:
document.getElementById(ID).attachEvent("onclick", che ci scrivo ?);
Grazie
--
Quicker  E-mail: 
qui...@supereva.it
http://www.quicker.f2s.com/

 document.getElementById(ID).attachEvent("onclick", che ci scrivo ?);
ci scrivi la funzione ma sempre e cmq senza parentesi tonde, quindi niente
passaggio valori in questo modo......
--
andreotta fabiano
WebMªster ATI POWER s.n.c.
andr...@atipower.it
http://www.aticommerce.com
  (new)
http://www.atipower.it
http://www.jsdir.com
http://www.dxml.it
  (u.c.)


wrote:

A l'è brut ma non si potrebbe fare qualcosa utilizzando eval?
<html>
<head><title>mo ce provo</title></head>
<body>
<H1
id="MyHeading"onclick="peresempio(
this.id
,'color','red')">Welcome!</H1>
</body>
</html><script language="javascript">
function peresempio(quale,atto,attribute){ 
ddd='document.getElementById(\''
		ddd+=quale.toString()+'\')'
		ddd+='.style.';
		ddd+=atto
ddd+='="'+attribute+'"';//alert(ddd)
		eval(ddd)}
		</script>

 </script>
Ciao Paolo!
sì infatti.......esiste cmq la possibilità di pasare i valori direttamente
durante la creazione della pagina......
perchè penso si riferisse all'utilizzo "dinamico" della funzione stessa.....
--
andreotta fabiano
WebMªster ATI POWER s.n.c.
andr...@atipower.it
http://www.aticommerce.com
  (new)


 ha scritto nel messaggio
news:aEXO6.21047$h9.17...@news.infostrada.it...

Con IE5 e NS6 ci sono varie possibilita':
-----------
function peresempio(quale,atto,attribute){
 quale.style[atto]=attribute;
}
function peresempio2(e){
 quale= (document.all)?event.srcElement:e.target.parentNode;
 quale.style[atto]=attributo;
}
function peresempio3(e){
 quale= (document.all)?event.srcElement:e.target.parentNode;
 quale.style.color='red';
}
function init(){
 document.getElementById('MyHeading2').onclick=peresempio2;
 document.getElementById('MyHeading3').onmouseover=peresempio3;
}
// -->
</SCRIPT>
</head>
<body id="mybody" topmargin=0 onLoad=init() >
<H1 id="MyHeading"
onclick="peresempio(this,'color','red')">Welcome!</H1>
<H1 id="MyHeading1" onclick="this.style['color']='red'">Welcome!</H1>
<H1 id="MyHeading2"
onMouseOver="atto='color';attributo='red'">Welcome!</H1>
<H1 id="MyHeading3" >Welcome!</H1>
---------------
Saluti, Paolo


wrote:

Ciao, 
si potrebbe anche impostare il ragionamento  su switch? senza
impegnare  un onload?
bisognerebbe essere sicuri che le variabili da utilizzare siano gia'
disponibili in casi piu' complessi per le funzioni interne di servizio
(ahem scusate se interloquisco a quote gia' troppo rarefatte per le
mie possibilita'...)
<HTML>
<HEAD>
<TITLE> potrebbe in qualche caso servire uno switch? </TITLE>
</HEAD>
<BODY>
<script language="javascript">
var haigiafatto=false
var aa='red'
var testo
var bb='green'
function nome1(){aa=haigiafatto?'magenta':aa
//e=window.event
with(window.event.srcElement)
switch(id){
case 'bubu':
style.color=aa
alert('son timido e divento '+ aa+' facilmente')
innerText=scrivi(aa)
haigiafatto=true
break
case 'bibi':
style.color=bb
alert('son fegatoso,litigioso e livido')
innerText=scrivi(bb)
break}
}
function scrivi(qq){w=!haigiafatto?' riclicca':'';return 'Sono
diventato '+qq+w
}
document.onclick=nome1
</script>
<DIV id='bubu'>clicca</DIV>
<DIV id='bibi'>clicca</DIV>
</BODY>
</HTML>

 perchè penso si riferisse all'utilizzo "dinamico" della funzione stessa.....
  Proprio cosi'.
  In pratica a me interessa tradurre questo:
  <H1 id="d2" onMouseOver="this.style.backgroundColor='white'"
 onMouseOut="this.style.backgroundColor=' black'">Passami sopra</H1>
   E ho deciso per questa soluzione che applicata solo in questo caso
 specifico e' assurda ma che in un contesto in cui con un unico ciclo posso
 dinamicamente assegnare tutti gli eventi a una moltitudine di elementi <H1>
 mi pare sensata ossia:
function attacca_eventi_in_H1() {
for(var i = 1; i < n; i++)  {
 str = "document.getElementById(\'" + "d" + i  + "\').style.color=";
with(document.getElementById("d" + i)) {
     attachEvent("onmouseover",new Function(str +"\'white\';"));
     attachEvent("onmouseout",new Function(str +"\'black\';"));
}
}
}
Penso possa andare perche' se non sbaglio new Function() non crea
subito la funzione ma la compila dinamicamente ogni volta al verficarsi
dell'evento. Non vorrei creare qualche centinaio di funzioni con
conseguente occupazione di risorse. E' corretta la mia impostazione ?



Forse e' proprio ora che smetta di scrivere quando soffro di insonnia,
ma cosi'?
non e' proprio elastico ma qualcosa 
vabbeh, mi taccio.
mi sfugge cio' che sperabilmente domattina sembrera' chiaro anche a me
spero..
<HTML>
<HEAD>
<TITLE>soffro di insonnia </TITLE>
<script language="javascript">
function peresempioon(){ 
ddd='this.style.color="red"'
eval(ddd)}
function peresempioout(){ 
ddd='this.style.color="black"'
eval(ddd)}
function peresempioclick(){ 
ddd='window.open(this.id.toString()+\'.html\',\'bubu\')'
eval(ddd)}
		</script>
<script language="javascript">
function init(){
for (i=0;i<document.getElementsByTagName('h1').length;i++)
{
document.getElementsByTagName('h1')[i].id='b'+i
document.getElementsByTagName('h1')[i].onmouseover=peresempioon
document.getElementsByTagName('h1')[i].onmouseout=peresempioout
document.getElementsByTagName('h1')[i].onclick=peresempioclick}
}</script>
</HEAD>
<BODY onload=init()>
<H1>ff</H1><BR><H1>ff</H1>
<BR><H1>ff</H1><BR><H1>ff</H1><BR>
</BODY>
</HTML>

 eval(ddd)}
  Non capisco a cosa serva eval()
 perche' da me funziona anche se scrivo
 function peresempioon(){ 
    this.style.color="red";
}
  Pero' ancora pare che non ci sia modo
di passare un valore ad un funzione.
  Si potrebbe impostare al volo un attributo
 dell'elemento e passargli quello:
  <h1 class="123"></H1>
 e poi   
   function peresempioon(){ 
     alert(this.className);
   }
 
  Cosi' posso lavorarmi il mio valore numerico dentro
la funzione.
  OK funziona. Con una toppa paurosa pero'.


 ha scritto nel messaggio
news:NsBP6.6396$WT5.2...@news.infostrada.it...

Mi sembra che una funzione standard viene compilata una volta e il
contenuto elaborato solo se/quando chiamata; ossia l'oggetto function
viene instanziato solo quando chiamato.
Quando si instanzia il gestore d'evento questo ha solo un riferimento
alla funzione da chiamare.
Per aggiungere gli eventi a un tag mi sembra che la funzione piu'
semplice sia:
------------
function fAggEvent(){
 for (el in document.getElementsByTagName('h3'))
    document.getElementsByTagName('h3')[el].onmouseover=cambia;
}
-----------------
Ora ci sono 2 opzioni i parametri sono sempre identici o sono specifici
per ogni elemento.
Primo caso
-------------------
function cambia(){
 this.style.color='red'
}
-----------------
secondo caso:
-----------------
function cambia(){
 this.style.color=this.colorA
}
.........
<h3 colorA='red'>.......
-------------------------
Oltre a questi metodi, MS consiglia l'uso dei behavior:
<style>
H2 {behavior:url(hilite.htc)}
</style>
con il file esterno htc:
---------------
<PUBLIC:ATTACH EVENT="onmouseover" ONEVENT="Hilite()" />
<PUBLIC:ATTACH EVENT="onmouseout"  ONEVENT="Restore()" />
<SCRIPT LANGUAGE="JScript">
var normalColor;
function Hilite()
{
   if (event.srcElement == element)
     normalColor = style.color;
     runtimeStyle.color  = "red";
     runtimeStyle.cursor = "hand";
   }
}
function Restore()
{
   if (event.srcElement == element)
   {
      runtimeStyle.color  = normalColor;
      runtimeStyle.cursor = "";
   }
}
</SCRIPT>
-----------------------
Saluti, Paolo