javascript - HTML 按钮的“onclick”属性在被点击之前调用函数
问题描述
我试图d3.select
用一个属性在 DOM 中创建一个按钮,onclick
这样当我单击该按钮时,就会调用一些函数。但是,在我单击按钮之前,该函数只是调用自身。这是我的 JS 代码:
var something = function() {
console.log("do something");
}
d3.select("#done")
.append("button")
.text("Button Text")
.attr("onclick", something);
这是我的 HTML(还有更多,但这是相关部分):
<div id="done"></div>
当我执行代码时,something 函数会立即被调用并打印到控制台。我怎样才能解决这个问题?
如果这看起来真的很幼稚,请提前道歉——我对此很陌生。
解决方案
而不是 using attr("onclick", something)
,它将立即调用该函数,而是使用以下方式设置事件侦听器selection.on
:
var something = function() {
console.log("do something");
}
d3.select("body")
.append("button")
.text("Button Text")
.on("click", something);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
为了让您了解为什么something
在您的代码中被调用,即使它没有括号(如something()
),文档解释selection.attr
说:
[...] 如果值是一个函数,它会针对每个选定的元素进行评估。
话虽如此,您正在评估该功能(因此,在控制台中记录一条消息)。另外,请记住您的函数返回undefined
,因此您没有添加任何属性。
推荐阅读
- php - Laravel Collective 表单提交未正确路由
- javascript - 在 iPhone 浏览器上下载 VCF 文件
- java - Java:如何在 Spring Boot 测试中实现 @BeforeAll 和 @AfterAll?
- python - Python给Dict加值,根据不规则的ID迭代加
- python - NetworkX - 计算断开连接图中的最大匹配
- graphdb - 提供程序 com.ontotext.trree.plugin.externalsync.impl.lucene4.Lucene4Plugin 无法实例化
- sapui5 - 调试器中有关组件的错误,应用程序工作
- amazon-web-services - 如何将 Amazon S3 多部分文件重新组合在一起?
- java - 如何在android WebView中隐藏HTML5播放按钮的视频播放器
- docker - 如何将我的项目代码复制到 Jenkins 容器