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

javascript google-apps-script web-applications dom-events

22911 просмотра

4 ответа

96 Репутация автора

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

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

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

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

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

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

Автор: T-L Источник Размещён: 20.01.2013 02:19

Ответы (4)


33 плюса

42814 Репутация автора

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

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');
}

Справка: это решение было дано Марком Линусом .

Автор: Hanky Panky Размещён: 20.01.2013 02:20

10 плюса

9940 Репутация автора

Делай так:

document.getElementById('button1').onclick = function(){
    doSomething('with_this_parameter');
}
Автор: Danilo Valente Размещён: 20.01.2013 02:21

1 плюс

191 Репутация автора

Я обычно делаю 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);

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

Автор: Trevor Iampen Размещён: 21.01.2013 02:37

1 плюс

664 Репутация автора

Чтобы назначить ссылку на функцию некоторой переменной, вы делаете:

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');
Автор: abhishek kasana Размещён: 04.03.2019 10:28
Вопросы из категории :
32x32