PDA

View Full Version : [javascript] problema onClick e su AddEventListener


DesmoColo
24-10-2008, 17:35
Ciao!
Ho fatto una paginetta web con le seguenti caratteristiche:
un bottone, che una volta cliccato crea una tabella contenente un bottone. Il bottone generato, quando clicckato deve invocare una funzione js.
Il problema sta nell'onclick di tale bottone: settattribute("onnclick", nomefunzione) non va su IE.
Ho provato a fare bottone.addEventListener("onclick", nomefunzione, false), ma javascript mi dice che la "proprietà o metodo non sono supportatiti dall'oggetto".
Avete suggerimenti?

shinya
24-10-2008, 17:48
Perchè invece di farti del male non decidi di usare una libreria?
Io ti consiglio jQuery, ma anche mootools non è male.

anonimizzato
25-10-2008, 10:07
La sintassi per i Listener degli eventi su IE e gli altri browser è diversa.

Consiglio: se devi fare qualcosa in più che un semplice script isolato di poche righe ascolta shinya e sfrutta il framework JQuery, ti semplifica notevolmente la vita.

DesmoColo
25-10-2008, 11:11
Perchè invece di farti del male non decidi di usare una libreria?
Io ti consiglio jQuery, ma anche mootools non è male.
Mootools lo uso già... però come lo sfrutto nel mio caso?
Cmq riscrivo il mio problema dall'inizio, perché forse ieri sono stato un po' frettoloso nel descriverlo (avevo un appuntamento e ho scritto il minimo indispensabile).
Ho implementato una funzione doRequestUsingPost che prende i campi di un form ed invia i dati a uno script php sfruttando la tecnica AJAX (e quindi creando un oggetto xmlHttpRequest).
Nella mia pagina web, ho un bottone che all'evento onclick invoca una funzione createTable(), che con il DOM crea una tabella contenente i campi del form (nome, cognome ecc...) ed un bottone a cui voglio associare la funzione doRequestUsingPost.

Il problema si manifesta appunto con questo bottone dinamico e l'onclick. Ho una variabile bottone siffatta:

var bottone = document.createElement("input");
document.setAttribute("id","bottone");
document.setAttribute("type","text");

Fin qui tutto bene.
Ecco che succede se:

bottone.setAttribute("onclick","doRequestUsingPost();");

Su FF onclick viene settato correttamente con la funzione, ma se premo la richiesta AJAX fallisce.
Anche su IE onclick viene settato, ma se premo sul bottone la funzione non viene invocata

bottone.onclick = new Function{doRequestUsingPost()};

si IE tutto ok, la richiesta viene inviata correttamente e la risposta arriva.
su FF però onclick non viene inserito...

bottone.addEventListener("onclick", doRequestUsingPost(), false);

IE risponde con "proprità o metodo non supportati dall'oggetto."

Altra questione, già che ci sono. quando la richiesta ha successo, vi è un altra funzione che cancella la tabella e sostituisce il tutto con un nuovo nodo testo con scritto "AJAX OK".
Come scritto sopra, tutto funziona solo con IE. Però la tabella viene cancellata, viene inserito il nodo testo per una frazione di tempo, e poi viene ripristinato lo stato iniziale, ovvero prima che premessi il bottone "createTable()"

Ora sapete tutta la storia. Aspetto fiducioso qualche consiglio :-)

DesmoColo
25-10-2008, 14:13
Ho risolto il discorso con addEventListener...
Non andava per due motivi:
- su IE va sostituito con AttachEvent ,e quindi ho messo una guardia siffatta:

if(inputElement.addEventListener){

inputElement.addEventListener("click",doRequestUsingPost,false);

}
else{
inputElement.attachEvent("onclick",doRequestUsingPost);
}


- sbagliavo la sintassi, ovvero non devo scrivere doRequestUsingPost(), ma doRequestUsingPost, senza parentesi.
Ora però ho un altro problemi che posto su un nuovo topic...