Newsgroup: it.comp.lang.javascript
Titolo: Assegnare dinamicamente eventi a elementi

Supponiamo di volere che all'apertura di una certa pagina, a tutte le 
immagini in essa contenute venga assegnato un dato evento onClick.
Ho scritto la seguente funzione e l'ho assegnata all'evento onLoad (<BODY 
ONLOAD="my()">), tuttavia non ne ho ricavato nulla, perchè cliccando sulle 
immagini non viene mostrata la finestra di dialogo window.alert("").
Probabilmente non è possibile assegnare dinamicamente un evento con JS, non 
è vero??
------------------------inizio codice------------------------------
function my(){
  for (var i = 0; i < document.images.length; ++i){
    with (document.images[i]){
      onclick = 'window.alert("")';
      /*
      //impostazione di varie proprietà...
      width = 70;
      height = 54;
      title = 'Clicca qui per ingrandire';
      */
    }; 
  };
};
-- 
Mauro Falzari (
http://digilander.libero.it/mauro.falzari
)
"Se guardi nell'abisso, anche l'abisso guarda in te."
(Friedrich Nietzsche)

 è vero??
E' possibilissimo invece, ma tu sbagli approccio, quando assegni una 
funzione ad un event-handler devi riferirti alla funzione, non puoi 
scrivere direttamente "la funzione" come faresti in un tag HTML.
La tua funzione diventa:
function my(){
  for (var i = 0; i < document.images.length; ++i){
    with (document.images[i]){
      onclick = allerta;
      /*
      //impostazione di varie proprietà...
      width = 70;
      height = 54;
      title = 'Clicca qui per ingrandire';
      */
    } 
  }
}
e la funzione allerta sara' ad esempio questa qui:
function allerta()
	{
	alert("Hai cliccato su un'immagine");
	}
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
 ----> itALY = it <----

 wrote in message
news:Xns9302BE5FA3...@130.133.1.4
colgo l'occasione per darti qualche riferimento che penso possa 
tornarti utile
indirizzo:
http//
pro.html.it
articoli:
1)-interazione utente-browser:gli eventi e javascript prima parte
2)-interazione utente-browser:gli eventi e javascript seconda parte
3 4)-l'oggetto Event che č diviso in due diversi articoli(W3C e
crossbrowser)
sono articoli ben fatti che trattano dell'Oggetto Event e altro
tra cui c'č un listener di un certo Goodman (non sň se č scritto cosě!)
molto utile anche se complessino  (ovviamente parlo per il mio livello)
buon lavoro
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 funzione ad un event-handler devi riferirti alla funzione
se ho capito bene, è esattamente quello che in linguaggio Object Pascal-
Delphi viene chiamato "tipo procedurale": in altre parole si tratta solo di 
un puntatore alla funzione e non una chiamata esplicita alla stessa.
Ti ringrazio del chiarimento. 
Molto bene, ma se io volessi passare a quella funzione anche un parametro? 
Per esempio, quando l'utente clicca sull'immagine, viene mostrata una 
finestra di dialogo con il nome dell'immagine stessa.
Guarda il codice sottostante: non funziona proprio nel punto in cui ho 
scritto
   onclick = showInfo(name);
anche perchè come mi avevi detto tu, avrei dovuto passare all'event handler 
(onclick) solo un puntatore alla funzione e non chiamare esplicitamente la 
funzione stessa.
Infatti sostituendo la riga con
   onclick = showInfo;
il codice gira senza errori...l'unico problemino è che showInfo mostra il 
messaggio
   "Il nome dell'immagine è undefinied"
...e non poteva essere diversamente!!
Come si risolve una situazione del genere in JS ???
Segue il codice:
/***********************INIZIO CODICE***************************/
function showInfo(aName){
  window.alert('Il nome dell\'immagine è ' + aName);
};
function myOnload2(){
/*eseguita al termine del caricamento della pagina.
  Iteriamo tutti gli elementi images della pagina
  per assegnare a certe proprietà sempre gli stessi valori*/
  for (var i = 0; i < document.images.length; ++i){
    with (document.images[i]){
      //impostazione di varie proprietà...
      title = 'Clicca qui per visualizzare il nome dell\'immagine';
      onclick = showInfo(name);
    };
  };
};
/*******************FINE CODICE******************************/


 2)-interazione utente-browser:gli eventi e javascript seconda parte
sono davvero molto utili e istruttivi! grazie.
Forse a qualcuno puň interessare che (iniziando a leggerli) ho risolto il 
problema di cui al mio post precedente, nel seguente modo:
<!-- codice inserito in una pagina HTML contenente immagini -->
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript1.2">
function imgInfo(){
  alert(
this.name
);
};
window.onload = function(){
var i;
  for (var i = 0; i < document.images.length; ++i){
    document.images[i].onclick = imgInfo;
  };
};
</SCRIPT>
<!-- fine codice -->
...non ho ancora capito perchč il costrutto for..in non funziona cosě:
  for (var i in document.images){
    i.onclick = imgInfo;
  };
...nč ho compreso -per ora- (sono un neofita di JS, non so se si era capito) 
il significato della scrittura:
    	window.onload = function()
...ma una cosa x volta!
Intanto grazie.


 Come si risolve una situazione del genere in JS ???
assegna ad ogni immagine un nome e definisci il gestore onclick come segue
var imageNames = ["nome dell'immagine numero 1", "nome dell'immagine numero
2", ... "nome dell'immagine numero n-1"];
for (var i = 0; i < document.images.length; i++)
{  images[i].imageName = imageNames[i];
    images[i].onclick = function() { alert("Hai appena cliccato
sull'immagine di nome " + this.imageName); };
}
~~
artemis.alpeia
now working on project BunVolley (5%)

  };
perche' i in questo caso non e' quello che ti aspetti ovvero un indice
ma volta a volta una proprieta'
prova a inserire un alert (i) ne ciclo e vedrai che per esmpio
l' alert restituira' 'length'
e altre cose a seconda del browser
la seguente assegnazione che operi sara' quindi priva di significato.