Newsgroup: it.comp.lang.javascript
Titolo: DOM + Event

Sto lavorando su un dataGrid in JS.
Il tutto è fatto ad oggetti, ad ogni modo, vorrei capire come fare per
attaccare un evento.
Mi spiego: all'interno della mia classe ho un metodo per creare le celle
nel THEAD. Ad ogni cella dovrò poi attaccare degli eventi.
Come si fa? Cioè mi conviene attaccare l'evento con:
myTd.setAttribute("onclick", "funzione");
oppure devo usare addEventListener e attachEvent per IE?
Altro problema. Vorrei che l'evento fosse un metodo della classe.
L'approccio è giusto? 
Ciao.
Faser
-- 
FABIO SERRA
*Questo testo deve essere valutato secondo il senso della RFC-3*
Per rispondere in e-mail sostituire "invalid" con "faser"
--------------------

 Ciao.
Forse sono il meno indicato per darti una risposta a questa domanda (Zer0 
o Andrea o Carena o Maya/Juliet sono piu' ferrati) ma se posti un po' di 
codice per farmi capire magari riesco a darti una mano.
La prima cosa ch mi vien da pensare e' che ad una cella (<TD>) non puoi 
attaccarci alcun evento, come potresti invece ad un link, ma non e' che 
abbia ancora approfondito piu' di tanto il DOM2 :-)
-- 
Ciao, Riccardo.
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
    itALY = it

abbia ancora approfondito piu' di tanto il DOM2 :-)
no, e' corretto in ottica dom applicare a qualunque tag un evento per
quanto mi consta, (e' una delle cose belle...)  a prezzo certamente di
non rendere la pagina retrocompatibile.
credo  [ attenzione che i miei credo sono pericolosi] che la scelta di
addEventListener potrebbe essere necessario se fosse importante
gestire in modo fine le modalita' di reazione all' evento (cliccare su
una foto contenuta in una cella implica che anche la cella viene
cliccata e in casi complessi puo' essere  necessario o semplicemente
vantaggioso tenerne conto e gestirlo) dato che nei parametri devi
settare anche useCapture (booleano,terzo parametro) ma ti rimando a
http://www.mozilla.org/docs/dom/domref/dom_el_ref31.html
e al ink w3c che li' trovi
ma se non si hanno necessita' particolari,
e qui parlo in generale,
anche la semplice imposizione di
myTD.onclick=funzione 
[senza parentesi di chiamata]
verra' gestito convenientemente senza doversi arrampicare per i nuovi
problemi di compatibilita' della codifica della gestione di eventi nei
browser serie5+
e tenendo presente  che funzione dovra' naturalmente contenere al suo
interno (non come parametro perche' come abbiamo visto non si puo'
settare onclick=funzione() ma solo onclick=funzione) la parolina
magica
this che consente di riferirsi alla corretta cella myTD con i suoi
data value childnodes style e quanto passa il convento
Ho scritto offline: se qualcun altro degli evocati da Riccardo, che
saluto, hanno scritto, beh, segui loro e dimentica queste righe

data value childnodes style e quanto passa il convento
Perfetto !! 
L'unico problema è che quindi non posso passare parametri al metodo. Come
si fa in questo caso? 
Se al posto di fare
myTd.onclick = this.prova;
faccio:
myTd.setAttribute("onclick",this.prova('p'));
ogni cella creata mi fa scattare l'evento e richiama il metodo prova
Già che ci sono ti chiedo se hai mai usato il DOM Inspector di Mozilla. Nel
caso, a me capita che quando analizzo i DOM Nodes e clicco sull'elemento,
Mozilla mi evidenzia una parte diversa da quella di rendering. Cioè, io
creo la mia tabella e le mie righe, poi quando dall'inspector clicco su
table nel browser mi viene evidenziata una parte diversa. Vorrei solo
essere sicuro che non è un bug, ma colpa mia che creo i documenti un pò
alla caz..
Ciao e grazie ancora.
CODICE TRASH
DataGrid.prototype.addHeader = function(){
	var myThead = this.myThead;
 
	var nrColumn = this.columnName.length;
	var nrLoop = (this.maxRow*nrColumn);
	var columnDim = Math.round(100/nrColumn);
 
	var myTr = document.createElement("tr");
	var myTd = document.createElement("td");
	var myText = document.createTextNode(" ");
		myTd.appendChild(myText);
		myTr.appendChild(myTd);
		myTd.className = "dataGridBlock";
 
	for(var i=0; i < nrColumn; i++) {
		myTd = document.createElement("td");
        myText = document.createTextNode(this.columnName[i]);
		myTd.appendChild(myText);
		myTd.setAttribute("width",columnDim+"%");
		myTd.setAttribute("id","th_"+this.columnName[i]);
		myTd.className = "dataGridHeader";
        myTr.appendChild(myTd);
 
		//Attach event
		if(this.isResizable) {
			 myTd.onclick = this.prova;
			 //myTd.setAttribute("onclick",this.prova('p'));
		}
 
	}	
 
	// Close Thead
	myThead.appendChild(myTr);
}
DataGrid.prototype.prova = function() {
 
	alert(
this.id
);
	return false;


CODICE TRASH
sono pigro come un tapiro
hai per caso una paginetta completa dalla punta di html a /html da
qualche parte in giro?
magari si attacca, ehm si inserisce nel thread qualcuno colto sul
serio  con poco tempo a disposizione  facilitato a inserirsi e a
rispondere (ndo' stanno i fabiani i maya desnudi o vestiti quando te
ne servono uno?)

qualche parte in giro?
Appena ho qualcosa di decente la metto su. Intanto ti ringrazio perchè mi
sei stato utilissimo.
Infine, premesso che in JS sono un newbie, devo però dire che la
programmazione OOP di JS è abbastanza assurda ed anche un bel pò brutta :-(
Ciao.


sei stato utilissimo.
prego,
 ti diro', quando qualcuno torna e dice grazie, sara' una
soddisfazione picciola picciola, ma pur sempre qualcosa ;-)