onclick 功能自动运行

Posted

技术标签:

【中文标题】onclick 功能自动运行【英文标题】:onclick function runs automatically 【发布时间】:2013-01-03 17:25:33 【问题描述】:

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

直接来自htmlService的例子,没关系——当按钮被按下时运行...

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

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

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

任何对此行为的见解将不胜感激......如果答案很明显,对不起!

【问题讨论】:

() 后面的函数引用总是调用函数。 【参考方案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');

参考:此解决方案由Mark Linus 提供。

【讨论】:

不客气。 Mark Linus 建议的答案是这样做的方法 用解决方案完成您的问题(从我的复制/粘贴),然后它将被标记为已接受【参考方案2】:

这样做:

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

【讨论】:

【参考方案3】:

我通常会这样做:

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

希望这会有所帮助!

【讨论】:

【参考方案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 功能自动运行的主要内容,如果未能解决你的问题,请参考以下文章

javascript中动态创建button以后,加入onclick。为何网页加载时会自动运行这个onclick事件?

Pentaho CDE Dashboard BI(自动刷新 + Onclick 刷新功能)在控制台中创建错误

Youtube API - onclick 播放视频 - 跨浏览器

如何在 ReactJS Typescript 中 2 分钟后自动发生 onclick

自定义环境中运行应用程序中的 Grails 自动重新加载功能

如何在tkinter中每10秒自动运行一次功能[重复]