Discussione:
Cambiare l'attributo onclick al volo?
(troppo vecchio per rispondere)
Darkbyte [Google]
2006-10-21 09:37:59 UTC
Permalink
Come da oggetto, sto tentando di cambiare al volo il valore
dell'attributo onclick="" di un certo div.
Originariamente il mio html è pressocchè questo:

<div style="..." id="main" onclick="funzione_a()">
testo bla bla bla
</div>

e lo script è:

<script type="text/javascript">
funzione_a()
{
alert("Funzione A");
document.getElementsByTagName("div").item(1).onclick =
"funzione_b()";
return 0;
}

funzione_b()
{
alert("Funzione B");
return 0;
}
</script>

Ma non succede nulla. Cioè al click sul div mi viene mostrato l'alert
della funzione A, che però non fa cambiare la proprietà "onclick" del
div. E' una cosa che javascript non può proprio fare o sto sbagliando
io?
s***@gmail.com
2006-10-21 15:07:05 UTC
Permalink
Ciao, non puoi cambiare dinamicamente l'onclick asssegnandogli una
stringa, gli devi assegnare l'indirizzo di una funzione

[code]
function f(divRerence)
{
alert(div.innerHTML);
}


tuoDIV.onclick = f(tuoDIV); // NO VIRGOLETTE!

[/code]

ho messo un parametro per farti vedere come lo puoi passare...

spero ti sia di aiuto!
Darkbyte [Google]
2006-10-22 20:25:01 UTC
Permalink
Si infatti, quella sintassi m'era sfuggita!!! Eppure l'ho anche
utilizzata in altri progettini... Memoria dannata (o d'annata?)!!! :D
Andrea Scartabelli
2006-10-22 21:15:02 UTC
Permalink
Post by s***@gmail.com
non puoi cambiare dinamicamente l'onclick asssegnandogli una
stringa, gli devi assegnare l'indirizzo di una funzione
tuoDIV.onclick = f(tuoDIV);
ho messo un parametro per farti vedere come lo puoi passare...
Hai fatto un po' di confusione e se provi il tuo script ti accorgerai
che va anche in errore.

Da scripting devi assegnare al gestore di eventi un riferimento a una
funzione:

tuoDIV.onclick = f;

Senza parentesi, altrimenti la chiameresti e assegneresti a onclick il
risultato della funzione.
All'interno della funzione "f" ti puoi riferire all'oggetto
semplicemente con "this":

function f(){alert(this.innerHTML);}

Nel codice html puoi assegnare al gestore di eventi un attributo
onclick: il valore che dai a questo attributo e' il corpo della funzione.
Quindi l'esempio di cui sopra diventa:

<div onclick="alert(this.innerHTML)"> ... </div>

Sono un po' di corsa, ma spero di essere stato chiaro.
ZER0
2006-10-23 08:23:21 UTC
Permalink
Post by Andrea Scartabelli
Post by s***@gmail.com
ho messo un parametro per farti vedere come lo puoi passare...
Hai fatto un po' di confusione e se provi il tuo script ti accorgerai
che va anche in errore.
Da quando in qua testi il tuo codice con IE...? O almeno, solo con IE.

In pratica sta solo assegnando a onclick il valore di ritorno di una
funzione, cosa del tutto lecita, e nel nostro caso tale valore è undefined.

L'unico browser che va in errore è IE, in quanto si aspetta un riferimento
valido, o null.
--
~ "La realtà è ciò che, quando smetti di crederle, non va via."
Philip K. Dick
Andrea Scartabelli
2006-10-24 12:15:30 UTC
Permalink
ZER0 wrote:

[...]
Post by ZER0
Post by Andrea Scartabelli
Hai fatto un po' di confusione e se provi il tuo script ti accorgerai
che va anche in errore.
Da quando in qua testi il tuo codice con IE...? O almeno, solo con IE.
Eh, no, non ho proprio testato alcunche': frase monca per la fretta.
La ricompongo: "ti accorgerai che va anche in errore con ie".

Quel magnifico messaggio "non implementato" mi e' rimasto nel cuore.
Post by ZER0
In pratica sta solo assegnando a onclick il valore di ritorno di una
funzione, cosa del tutto lecita, e nel nostro caso tale valore è undefined.
Piu' che giusto, sebbene lontano dalle intenzioni di Darkbyte e di
stefanomnn...
ZER0
2006-10-24 12:42:29 UTC
Permalink
Post by Andrea Scartabelli
Post by ZER0
Post by Andrea Scartabelli
Hai fatto un po' di confusione e se provi il tuo script ti accorgerai
che va anche in errore.
Da quando in qua testi il tuo codice con IE...? O almeno, solo con IE.
Eh, no, non ho proprio testato alcunche': frase monca per la fretta.
La ricompongo: "ti accorgerai che va anche in errore con ie".
Ti accorgerai che il significato cambia totalmente.
Post by Andrea Scartabelli
Post by ZER0
In pratica sta solo assegnando a onclick il valore di ritorno di una
funzione, cosa del tutto lecita, e nel nostro caso tale valore è undefined.
Piu' che giusto, sebbene lontano dalle intenzioni di Darkbyte e di
stefanomnn...
Difatti non ho fatto un reply a un loro messaggio, ma a un tuo. Ho voluto
solo correggere quella tua affermazione che scritta così come avevi fatto
era errata e potenzialmente fuorviante.
--
~ La realtà è un'illusione causata dall'assenza di alcool.
Loading...