Newsgroup: it.comp.lang.javascript
Titolo: attivare evento su elemento di una pagina richiamata via ajax.

Salve.
Ho una normale pagina html.
All'interno di questa pagina inserisco un form attraverso una chiamata ajax.
Tale form contiene una select e, tramite javascript, vorrei fare delle 
operazioni al "change" della select.
Con jquery sarebbe:
 
$("#select_type").change..........
 
#select_type e' l'id della select.
Non funziona e il mio dubbio e' che, essendo il form richiamato via 
ajax, l'elemento con id #select_type non viene visto.
Sbaglio?
Se e' come dico quale soluzione potrei adottare?
Grazie.

 ajax, l'elemento con id #select_type non viene visto. Sbaglio?
 
Se il form lo hai inserito correttamente nella pagina deve vederlo. Se 
non lo vede qualunque altra strada fallirà, devi capire con un po' di 
debug dove stai sbagliando ad inserire il form nella pagina.

 ajax, l'elemento con id #select_type non viene visto. Sbaglio?
 
Hai (almeno) due possibilita`.
 
La piu` rapida e` quella di usare .on() (se usi l'ultima versione di 
jQuery) o .live() (se ne usi una piu` vecchia).
In questo modo l'evento viene attaccato al body, e solo quando viene 
rilevato, jQuery controlla se e` riferito all'elemento su cui l'hai 
richiesto.
 
Quella un po' piu` complessa e` di attaccare l'evento .change() DOPO che 
hai inserito la select nella pagina. Ti basta metterlo nella funzione che 
richiami al success: della chiamata AJAX.
 
Bye.
 


Ma la pagina non viene ricaricata, il form viene, come dire, appiccicato 
alla pagina esistente senza che questa venga ricaricata, tu dici che i 
nuovi elementi dovrebbero comunque essere visti?

 richiesto.
 
Perfetto :-)
Grazie mille.

 richiesto.
 
Avendo nel form due select e volendo attivare degli eventi al change di 
ciascuna delle select, come posso capire nella funzione javascript
quale select ha attivato l'evento change?
Ovviamente non posso riferirmi ad esse tramite id o class.

 nuovi elementi dovrebbero comunque essere visti?
 
Certo. Anche perché, altrimenti, non potresti inviare il form.

 esse tramite id o class.
 
Prima parlavi di ID, ora non puoi riferirti con l'ID?
 
Comunque sia, basta passare l'oggetto come parametro alla function 
richiamata, oppure leggere la proprièta target dell'oggetto event:
 
https://developer.mozilla.org/en/DOM/event.target
 

 Prima parlavi di ID, ora non puoi riferirti con l'ID?
 
Nel senso che:
 
select1 id "a"
select2 id "b"
 
nel javascript dovrei fare due funzioni simili, ciascuna per ogni id.
Vorrei quindi usare una sola funzione che capisca a quale select mi sto 
riferendo.


il metodo .live() di jquery mi ha risolto il problema.

 riferendo.
 
Nelle callback di jQuery, la variabile this si riferisce all'elemento 
(del DOM, non jQuery) che lo ha scatenato.
Puoi trasformarlo in un elemento jQuery facendo semplicemente $(this), e 
da li` "navigare" nel DOM. Per esempio:
 
var $mioform = $(this).closest('form');
 
ti mette in $mioform l'elemento <form> che contiene la tua select.
 
Bye.
 

 var $mioform = $(this).closest('form');
 
$(this) e' vero.....l'eta' comincia a farsi sentire :-(

 var $mioform = $(this).closest('form');
 
Puoi velocizzare facendo direttamente:
 
    var $mioform = $(this.form);
 
Presupponendo che `this` sia un elemento di una form, appunto.