Javascript 动态onclick内部属性?

Javascript 动态onclick内部属性?,javascript,html,d3.js,Javascript,Html,D3.js,我希望动态创建一组由字符串列表生成的按钮: keys = [ "Temp_Innen", "Temp_Außen", "Druck", "Feuchte_Innen", "Feuchte_Außen", "PH10", "PH25" ] 这些字符串也应用于onClick事件函数(参数)的每个按钮中 我使用它在主体内部创建按钮: d3.select('bod

我希望动态创建一组由字符串列表生成的按钮:

keys = [ "Temp_Innen", "Temp_Außen", "Druck", "Feuchte_Innen", "Feuchte_Außen", "PH10", "PH25" ]
这些字符串也应用于onClick事件函数(参数)的每个按钮中

我使用它在主体内部创建按钮:

d3.select('body')
  .selectAll('button')
  .data(keys)
  .enter()
  .append('button')
  .text(d => d)
  .attr('type', 'button');
这给了我漂亮的按钮:

但如何将每个字符串动态添加到通过onClick调用的函数参数中呢?我试过这个,但不起作用:

.attr('onClick',`clicked(${d => d})`);
但这不会将字符串写入clicked()参数,而是将其作为文本写入未表达:

<button type="button" onClick="clicked(d => d)">Temp_Innen</button>
<button type="button" onClick="clicked(d => d)">Temp_Außen</button>
...
Temp_Innen
临时工
...

是否有一种方法可以动态地进行,或者我应该考虑在HTML文件中写入所有这些按钮吗?

到目前为止:

.attr('onClick',(d) => {
  return `clicked("${d}")`});
正确地表示为:

<button type="button" onclick="clicked('Temp_Außen')">Temp_Außen</button>
<button type="button" onclick="clicked('Temp_Innen')">Temp_Innen</button>
Temp_Außen
温普伊宁酒店
到目前为止有效的方法是:

.attr('onClick',(d) => {
  return `clicked("${d}")`});
正确地表示为:

<button type="button" onclick="clicked('Temp_Außen')">Temp_Außen</button>
<button type="button" onclick="clicked('Temp_Innen')">Temp_Innen</button>
Temp_Außen
温普伊宁酒店
定义函数addClickFunction(d,i),其中值位于d和i中


首先定义函数addClickFunction(d,i),其中的值在d和i中,这与问题中的代码不同,因为传递给
attr
方法中匿名函数的第一个参数是绑定到元素的数据,如下所述:

[…]如果该值是一个函数,则按顺序对每个选定元素求值,并将其传递给当前数据(d)、当前索引(i)和当前组(节点),并将其作为当前DOM元素(节点[i])

另一方面,在你的问题中,这

`clicked(${d => d})`
…只是一个字符串,
d
从不求值

话虽如此,让我们继续回答:很多人建议不要使用内联事件,或者,比如你问题中的
onClick
。我将不参与讨论(见);然而,我认为添加一个带有D3
on
方法的事件侦听器是惯用的方法

这很简单:

.on("click", d => {
    //code here
})
以下是演示:

const key=[“Temp_Innen”、“Temp_Außen”、“Druck”、“Feuchte_Innen”、“Feuchte_Außen”、“PH10”、“PH25”];
d3.选择('主体')
.selectAll('按钮')
.数据(钥匙)
.输入()
.append('按钮')
.text(d=>d)
.attr('类型','按钮')
.on(“单击”,d=>console.log(“您单击了”+d))

首先,与您问题中的代码不同,这是因为传递给
attr
方法中匿名函数的第一个参数是绑定到元素的数据,如中所述:

[…]如果该值是一个函数,则按顺序对每个选定元素求值,并将其传递给当前数据(d)、当前索引(i)和当前组(节点),并将其作为当前DOM元素(节点[i])

另一方面,在你的问题中,这

`clicked(${d => d})`
…只是一个字符串,
d
从不求值

话虽如此,让我们继续回答:很多人建议不要使用内联事件,或者,比如你问题中的
onClick
。我将不参与讨论(见);然而,我认为添加一个带有D3
on
方法的事件侦听器是惯用的方法

这很简单:

.on("click", d => {
    //code here
})
以下是演示:

const key=[“Temp_Innen”、“Temp_Außen”、“Druck”、“Feuchte_Innen”、“Feuchte_Außen”、“PH10”、“PH25”];
d3.选择('主体')
.selectAll('按钮')
.数据(钥匙)
.输入()
.append('按钮')
.text(d=>d)
.attr('类型','按钮')
.on(“单击”,d=>console.log(“您单击了”+d))

总是想知道d3.js代码中的'd'参数来自哪里。。。我知道它代表我的数据中的一行,但“d”在范围中的位置是什么?它是由.data(keys)引入的吗?我认为d和I表示数组,就像I表示索引,d表示键一样。我猜是的,我总是想知道d3.js代码中的'd'参数来自哪里。。。我知道它代表我的数据中的一行,但“d”在范围中的位置是什么?它是由.data(keys)引入的吗?我认为d和I表示数组,就像I表示索引,d表示键一样。我想是的