Inoltre, vorrei aggiungere alcune altre cose.
In primo luogo, pensare a onclick
come una proprietà ordinaria di un oggetto.
Quindi, object.onclick = value
dove value = functionName()
è perfettamente bene, per esempio, potrebbe essere functionName()
restituendo un valore utilizzando return something;
Ma onclick
non è una proprietà comune. Quando il motore JS browser incontra assegnazioni alle proprietà basate su eventi (ad esempio onclick
, ondblclick
, onmouseover
, ecc), si crea uno stack per ogni elemento , costituito da mappatura b/w onSomeEvent e gestore.
Il gestore è un oggetto funzione. Ma se si fa qualcosa di simile element.onSomeEvent = functionName();
si sta semplicemente chiamando la funzione functionName()
e questo sarebbe stato bene se functionName()
è stata definita come
function functionName() {return function(){/*do something*/};}
Ma poiché functionName
nel tuo caso non restituisce una funzione, viene visualizzato un risultato inaspettato.Questo è il principale svantaggio di lingue come JavaScript JavaScript . In un linguaggio fortemente tipizzato che avrebbe generato un errore ... perché
class Element {
Function onclick = null;
Function ondblclick = null;
/*other code*/
}
document.getElementById('idName').onclick = new Function(); // correct
document.getElementById('idName').onclick = function(){}; // correct
document.getElementById('idName').onclick = functionName();
/*
* correct if functionName defined as
* Function functionName() {return new Function();} or
* Function functionName() {return function(){};}
* and incorrect for any other case
*/
Non sta eseguendo il primo, allora perché stai eseguendo il secondo con quelli '()'? Rimuovili e stai bene. –