的onclick功能自动运行(onclick function runs automatically

2019-07-18 11:21发布

使用谷歌Apps脚本我有运行的参数传递一个js函数的麻烦。 当我添加的参数,它会永远运行的代码加载网页时,而不是在单击按钮时。

从HtmlService例如直接,这是确定 - 它是按下按钮时运行...

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

但是,当我添加一个参数来调用(和功能)如下,它运行只有一次在页面加载时(当按下按钮没有)...

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

任何深入了解这种行为将不胜感激......抱歉如果答案是显而易见的!

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

参考:此溶液通过给马克·莱纳斯 。



Answer 2:

这样做:

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


Answer 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);

希望这可以帮助!



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


文章来源: onclick function runs automatically