使用谷歌应用程序脚本我无法运行传递参数的js函数。当我添加参数时,它将始终在页面加载时运行代码,而不是在单击按钮时运行。
直接来自HtmlService示例,没关系 - 它在按下按钮时运行...
document.getElementById('button1').onclick = doSomething;
但是当我在调用(和函数)中添加一个参数时,它会在页面加载时运行一次(而不是按下按钮时)......
document.getElementById('button1').onclick = doSomething('with_this_parameter');
如果答案显而易见,我们将非常感谢对此行为的任何见解......
答案 0 :(得分:30)
当你说
时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给出。
答案 1 :(得分:9)
这样做:
document.getElementById('button1').onclick = function(){
doSomething('with_this_parameter');
}
答案 2 :(得分:1)
我通常会像这样点击手柄:
// 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);
希望这有帮助!
答案 3 :(得分:1)
要将函数的引用分配给某个变量,请执行以下操作:
var a = doSomething;
doSomething是一个函数。
但是当您必须传递参数并分配该功能时
var a = doSomething(b);
这将导致麻烦,因为在将函数分配给变量时,它会被调用,而不是在打算被调用时才被调用。
要解决此问题,您可以使用箭头函数或简单函数来使用参数调用您自己的函数。
var c = () => doSomething(d);
这实际上被理解为var c = onymous_function;
或
var c = function() {
doSomething(d);
}
因此您可以:
document.getElementById('button1').onclick = () => doSomething('with_this_parameter');