Функция onclick запускается автоматически
Использование google apps script У меня возникла проблема с запуском js-функции, которая передает параметры. Когда я добавляю параметры, он всегда будет запускать код при загрузке страницы, а не при нажатии кнопки.
Прямо из примера HtmlService, это нормально - он запускается при нажатии кнопки...
document.getElementById('button1').onclick = doSomething;
Но когда я добавляю параметр к вызову (и функции), как показано ниже, он запускается только один раз, когда страница загружается (а не при нажатии кнопки)...
document.getElementById('button1').onclick = doSomething('with_this_parameter');
Любое понимание этого поведения было бы очень полезно... извините, если ответ очевиден!
Ответы
Ответ 1
Когда вы говорите
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');
}
Ссылка: это решение было дано Mark Linus.
Ответ 2
Сделайте следующее:
document.getElementById('button1').onclick = function(){
doSomething('with_this_parameter');
}
Ответ 3
Я обычно делаю 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);
Надеюсь, это поможет!
Ответ 4
Чтобы присвоить ссылку на функцию некоторой переменной, вы делаете:
var a = doSomething;
где doSomething - это функция.
Но когда вам нужно передать параметры и назначить эту функцию
var a = doSomething(b);
это вызовет проблемы, так как при назначении функции переменной она вызывается, а не тогда, когда она предназначена для вызова.
Чтобы преодолеть это, вы можете использовать функции стрелок или простую функцию для вызова своей собственной функции с параметрами.
var c = () => doSomething(d);
На самом деле это понимается как var c = anonymous_function;
или
var c = function() {
doSomething(d);
}
Следовательно, вы можете сделать:
document.getElementById('button1').onclick = () => doSomething('with_this_parameter');