onclick函数自动运行

时间:2013-01-20 14:19:10

标签: javascript web-applications google-apps-script javascript-events

使用谷歌应用程序脚本我无法运行传递参数的js函数。当我添加参数时,它将始终在页面加载时运行代码,而不是在单击按钮时运行。

直接来自HtmlService示例,没关系 - 它在按下按钮时运行...

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

但是当我在调用(和函数)中添加一个参数时,它会在页面加载时运行一次(而不是按下按钮时)......

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

如果答案显而易见,我们将非常感谢对此行为的任何见解......

4 个答案:

答案 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');
相关问题