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
。我将不参与讨论(见);然而,我认为添加一个带有D3on
方法的事件侦听器是惯用的方法
这很简单:
.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
。我将不参与讨论(见);然而,我认为添加一个带有D3on
方法的事件侦听器是惯用的方法
这很简单:
.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表示键一样。我想是的