PDA

View Full Version : [javascript] href=funzione(this.id) ,binding errato??


vv1984
27-10-2008, 15:30
Ciao a tutti,
devo creare dinamicamente una lista di
tag <a> con due attributi: un "id" e un "href"
che punta ad una funzione con "id" come parametro.

Ho provato in questa maniera,
ma this.id mi risulta undefined
(come se il binding non fosse corretto):


var element = createElement("a");
element.setAttribute("id",id_value);

element.setAttribute("href","javascript:funzione(this.id)");


Cosi il binding funziona, ma il professore mi ha fatto capire che
e' un metodo concettualmente sbagliato di puntare ad una funzione.


var element = createElement("a");
element.setAttribute("href","#");
element.setAttribute("id",id_value);
element.setAttribute("onclick","javascript:funzione(this.id)");

kk3z
27-10-2008, 15:55
element.onclick = function() { funzione(this.id) };
Questo è il metodo corretto (poi il tuo metodo non funziona con explorer).

Gli attributi standard li puoi anche settare direttamente:
element.id = id_value;
element.href = "javascript:void()";

Spiegazione possibile:
The code you write in the intrinsic event handler (onclick) is executed as if it is the body of a method on the element object. That means that "this" refers to the element object.

The [this] in the href is placed in location.href, recognized as a Javascript protocol URI, and attempted executed in the scope of the entire page.
That means that "this" most likely points to the window object.

http://bytes.com/forum/thread93763.html
http://jibbering.com/faq/#javascriptURI

vv1984
28-10-2008, 11:57
element.onclick = function() { funzione(this.id) };
Questo è il metodo corretto (poi il tuo metodo non funziona con explorer).

Gli attributi standard li puoi anche settare direttamente:
element.id = id_value;
element.href = "javascript:void()";

Spiegazione possibile:


http://bytes.com/forum/thread93763.html
http://jibbering.com/faq/#javascriptURI

Sono un po' di fretta e non ho ancora letto approfonditamente...
intanto pero' grazie mille per le informazioni!!

ciao