it-roy-ru.com

функция onclick запускается автоматически

При использовании скрипта Google Apps у меня возникают проблемы с запуском функции js, которая передает параметры. Когда я добавляю параметры, он всегда запускает код при загрузке страницы, а не при нажатии кнопки.

Прямо из примера HtmlService, все в порядке - он запускается при нажатии кнопки ...

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

Но когда я добавляю параметр к вызову (и функции), как показано ниже, он запускается только один раз при загрузке страницы (а не при нажатии кнопки) ...

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

Любое понимание этого поведения будет с благодарностью ... извините, если ответ очевиден!

14
T-L

Когда ты сказал 

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

Это означает вызов doSomething ('with_this_parameter') и затем присвоение возвращенного значения функции document.getElementById('button1').onclick. Следовательно, именно поэтому он вызывается, когда код достигает этой строки. Присваивается ли значение этому свойству или нет - это другой вопрос, но именно поэтому оно вызывается.

Используйте это так

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

Ссылка: Это решение было дано Марк Линус

30
Hanky Panky

Делай так:

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

Я обычно делаю clickHandlers примерно так:

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

Я не уверен, какой параметр вы добавляете, но вам нужно добавить элемент обратного вызова, чтобы передать его, если он не передан самой кнопкой через .setId/getId или .setTag/getTag. Если это из текстового поля:

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

Надеюсь это поможет!

1
Trevor Iampen