使用谷歌Apps脚本我有运行的参数传递一个js函数的麻烦。 当我添加的参数,它会永远运行的代码加载网页时,而不是在单击按钮时。
从HtmlService例如直接,这是确定 - 它是按下按钮时运行...
document.getElementById('button1').onclick = doSomething;
但是,当我添加一个参数来调用(和功能)如下,它运行只有一次在页面加载时(当按下按钮没有)...
document.getElementById('button1').onclick = doSomething('with_this_parameter');
任何深入了解这种行为将不胜感激......抱歉如果答案是显而易见的!
当你说
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');
}
参考:此溶液通过给马克·莱纳斯 。
这样做:
document.getElementById('button1').onclick = function(){
doSomething('with_this_parameter');
}
我通常做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);
希望这可以帮助!
要分配的功能,一些变量的引用,你这样做:
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');