12

Używanie skryptu aplikacji Google Mam problem z uruchomieniem funkcji js, która przekazuje parametry. Gdy dodaję parametry, zawsze uruchamia się kod po wczytaniu strony zamiast po kliknięciu przycisku.Funkcja onclick działa automatycznie

bezpośrednie z przykładu HtmlService, to OK - uruchamia po naciśnięciu przycisku ...

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

Ale kiedy dodać parametr do wywołania funkcji (i) poniżej, to działa tylko raz po załadowaniu strony (a nie wtedy, gdy przycisk jest wciśnięty) ...

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

Każdy wgląd do tego problemu byłoby bardzo mile widziane ... przepraszam, jeśli odpowiedź jest oczywista!

+3

'()' za referencją funkcji zawsze wywołuje funkcję. –

Odpowiedz

24

Kiedy mówisz

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

Oznacza to wezwanie doSomething ('with_this_parameter') a następnie przypisać wartość zwracaną do document.getElementById('button1').onclick. Stąd właśnie dlatego zostaje wywołana, gdy kod dotrze do tej linii. To, czy wartość jest przypisywana do tej właściwości, czy nie, jest kolejnym pytaniem, ale właśnie dlatego zostaje wywołane.

Używaj go jak ten

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

Reference: Rozwiązanie to zostało wydane przez Mark Linus.

+0

Dzięki za informacje :) –

+1

+1 z powodu wyjaśnienia –

+1

Nie ma za co. Odpowiedź zasugerowana przez Marka Linusa jest sposobem na zrobienie tego. –

9

Czy tak:

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

Dzięki - działa! wiem, że byłoby to proste: D –

1

zwykle zrobić clickHandlers tak:

// 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> 
} 

Nie jestem pewien, co parametr dodajesz, ale trzeba dodać element oddzwonienia zdać jeśli nie jest przekazywany przez sam przycisk przez .setId/getId lub .setTag/getTag. Jeśli pochodzi z pola tekstowego:

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

Mam nadzieję, że to pomoże!

Powiązane problemy