la funzione onclick viene eseguita automaticamente

Uso dello script di google apps Sto avendo problemi nell’esecuzione di una funzione js che passa i parametri. Quando aggiungo i parametri, il codice verrà sempre eseguito quando la pagina viene caricata anziché quando si fa clic sul pulsante.

Direttamente dall’esempio HtmlService, è OK – viene eseguito quando si preme il pulsante …

document.getElementById('button1').onclick = doSomething; 

Ma quando aggiungo un parametro alla chiamata (e alla funzione) come sotto, viene eseguito solo una volta quando viene caricata la pagina (e non quando viene premuto il pulsante) …

 document.getElementById('button1').onclick = doSomething('with_this_parameter'); 

Qualsiasi comprensione di questo comportamento sarebbe molto apprezzata … scusa se la risposta è ovvia!

Quando dici

 document.getElementById('button1').onclick = doSomething('with_this_parameter'); 

Ciò significa chiamare doSomething (‘with_this_parameter’) e quindi assegnare il valore restituito a document.getElementById('button1').onclick . Quindi è per questo che viene chiamato quando il codice raggiunge quella linea. Se il valore è assegnabile a quella proprietà o no è un’altra domanda, ma è per questo che viene chiamato.

Usalo in questo modo

 document.getElementById('button1').onclick = function(){ doSomething('with_this_parameter'); } 

Riferimento: questa soluzione è stata fornita da Mark Linus .

Fai così:

 document.getElementById('button1').onclick = function(){ doSomething('with_this_parameter'); } 

Di solito faccio clickHandlers in questo modo:

  // create button here or get button... var button1 = document.getElementById('button1').setName('button1'); var clickHandler = app.createServerClickHandler('doSomething'); button.addClickHandler(clickHandler); function doSomething(e){ var button1 = e.parameter.button1;  } 

Non sono sicuro di quale parametro si sta aggiungendo, ma è necessario aggiungere un elemento di callback per passarlo se non viene passato dal pulsante stesso tramite un .setId / getId o .setTag / getTag. Se proviene da una casella di testo:

  var textbox = app.createTextBox(); var button1 = app.createButton.setName('button1'); var clickHandler = app.createServerClickHandler('doSomething').addCallbackElement(textBox); button1.addClickHandler(clickHandler); 

Spero che questo ti aiuti!