Подтвердить что ты не робот

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

Использование google apps script У меня возникла проблема с запуском js-функции, которая передает параметры. Когда я добавляю параметры, он всегда будет запускать код при загрузке страницы, а не при нажатии кнопки.

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

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

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

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

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

4b9b3361

Ответ 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');