Newsgroup: it.comp.lang.javascript
Titolo: elem.click() is not a function

In FB (se scrivo così, si capisce che è FireBug e non Facebook? :) )
ottengo il messaggio di errore "elem.click() is not a function" quando 
eseguo "elem.click();".
Eppure elem punta correttamente all'elemento che mi interessa, e click() 
è un metodo valido, se non ho letto documentazione obsoleta.
 
Temo di trovarmi di fronte a quella situazione recente in cui esisteva 
un elemento di nome click e la mia istruzione non veniva interpretata 
come metodo perché puntava all'elemento. Però non sono in grado di 
trasferire la soluzione precedente, dove avevo a che fare con una form, 
al caso presente, dove l'elemento non ha un id nativo...
Ho provato ad assegnargli id "a12345" e poi a richiamare 
HTMLFormElement.prototype.a12345.click();
ma ottengo l'errore "HTMLFormElement.prototype.a12345.click() is 
undefined"...

 undefined"...
 
Beh ma che stupido che sono... e pensare che ho anche detto che non ho 
più una form...
HTMLDivElement deve sostituire HTMLFormElement (ho verificato con 
alert(elem);)
Però sulla seconda parte dell'istruzione è buio pesto, mi perdo nelle 
pagine di MDN. Provando con
HTMLDivElement.prototype.click.call(a12345);
ottengo lo stesso errore precedente.
Sto facendo un po' di confusione, me ne rendo conto...

 HTMLDivElement.prototype.click.call(a12345);
 
Ok, verificato che "call" è un metodo valido. Più di questo purtroppo, 
non so fare.

 è un metodo valido, se non ho letto documentazione obsoleta.
 
Chiedo scusa davvero a tutti, lasciate perdere le fesserie che ho 
scritto, forse anche per l'ora tarda.
Ora ho riprovato dopo una pausa e non ottengo più l'errore. Anche 
sforzandomi non capisco cosa c'era di differente.
In ogni caso, "elem.click();" non produce effetti. Ho risolto comunque 
richiamando la funzione specificata per l'evento onlick dell'elemento.
Rimane la mia curiosità di capire perché col primo metodo 
(elem.click();) non funziona e col secondo (nomeFunzionePerOnClick();) sì.

 HTMLFormElement.prototype.a12345.click();
 
Ovviamente questo è sbagliato.
Dovresti avere, assumendo che `a12345` sia un HTMLDivElement, per esempio:
 
    var div = document.getElementById("a12345");
    HTMLDivElement.prototype.click.call(div);
 
Ma, ancora, prima va confermato se sei nel contesto giusto.
 

 (elem.click();) non funziona e col secondo (nomeFunzionePerOnClick();) sì.
 
Hai evidentemente qualche problema nel tuo codice. In un elemento che
supporta il metodo `click`, gli event handler assegnati all'evento
`onclick` vengono regolarmente scatenati. In un documento vuoto, puoi
provare a fare:
 
    var div = document.body.appendChild(document.createElement("div"));
 
    div.onclick = function() { alert("clicked!") };
 
    div.click();
 
Io ottengo regolarmente un alert con "clicked!", anche se associo tale
funzione tramite `addEventListener`.

 stato sovrascritto.
 
elem è un div a cui è assegnato l'attributo onclick. Io vorrei 
semplicemente eseguire la funzione specificata in onclick="..." senza 
dover cliccare.
Forse è questo che intendi quando dici che è stato sovrascritto?
 

 Forse è questo che intendi quando dici che è stato sovrascritto?
 
Per "sovrascritto", intendo dire che è stato fatto qualcosa tipo:
 
    elem.click = undefined;
 
O anche in una delle catene dei prototipi.
 

      console.log(HTMLDivElement.prototype.click);
 
No, non l'avevo verificato. Entrambe le istruzioni restituiscono 
"undefined".
Cosa significa? Che FF 3.6 non supporta i click nei div? E allora cosa 
scatena l'evento quando clicco sull'elemento?

 restituisce [object HTMLDivElement] ma una parte dell'innerHTML del div
Mi correggo: non è l'innerHTML, ma l'html contenuto nel tag di apertura 
del div stesso, cioè "<div class='...' style='...' onclick='...'>".

 scatena l'evento quando clicco sull'elemento?
 
temo di no:
 
https://developer.mozilla.org/en/DOM/element.click
 
 
Comunque sia, io avevo provato con un href con dentro una image,e 
l'onclick sull'href non veniva eseguito da chrome e safari (sembravano 
non propagare l'evento).
 
in compenso fireevent (e il corrispondente per gli altri browser che ora, 
pardon, non ricordo ... createEvent?) mi creava problemi con gli altri 
browser (non ricordo bene, forse non propagava correttamente dall'img 
all'anchor).
 
Soluzione che avevo usato (prototipo):
 
if(typeof element.click==function)
	element.click();
else
	fireevent/altro;

 E allora cosa scatena l'evento quando clicco sull'elemento?
 
In primis, non tutto ciò che il browser fa, viene "esposto". Nel senso
che non è detto che sia scriptabile.
 
Seconda di poi, come ti ha detto Cristiano, puoi fare come fa appunto il
browser (che non è chiamare un metodo "click" per scatenare l'evento), e
creare l'evento click da poi emettere:
 
https://developer.mozilla.org/en/DOM/document.createEvent
 
 
Terzo, ti conviene aggiornare il browser: siamo già a Firefox 7, inoltre
Firefox 4 ha segnato una "svolta" per il browser, qualsiasi versione
antecedente a quella non viene più supportata molto (e tra poco non
verrà supportata per nulla, temo).