12

Utilizzo dello script di google apps Ho problemi a eseguire 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.La funzione onclick viene eseguita automaticamente

diretto dall'esempio HtmlService, è OK - funziona quando si preme il pulsante ...

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

Ma quando aggiungo un parametro alla chiamata (e la funzione), come di seguito, viene eseguito solo una volta quando la pagina viene caricata (e non quando si preme il pulsante) ...

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

Qualsiasi comprensione di questo comportamento sarebbe molto apprezzato ... scusate se la risposta è ovvia!

+3

'()' dietro un riferimento di funzione chiama sempre la funzione. –

risposta

24

Quando si dice

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

Ciò significa chiamata 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.

usare in questo modo

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

Riferimento: Questa soluzione è stata data da Mark Linus.

+0

Grazie per le informazioni :) –

+1

+1 a causa della spiegazione –

+1

Siete i benvenuti. Risposta suggerita da Mark Linus è il modo per farlo –

9

fare in questo modo:

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

Grazie - funziona! sapere che sarebbe semplice: D –

1

faccio di solito 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; 
    <do something with var button> 
} 

Non sono sicuro di quale parametro si sta aggiungendo, ma è necessario aggiungere un elemento di callback per passare se non viene passato dal pulsante stesso tramite .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 aiuti!

Problemi correlati