下面的代码非常适合测试,我只是在Visual Studio Code
(https://code.visualstudio.com/)中使用它,并从Live Server
扩展(https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer):
<html>
<head>
</style>
<script src="https://d3js.org/d3.v4.js"></script>
</head>
<body style="background-color:black;">
<div class="row">
<div class="column left">
<form action="" method="post" id="formulario-radar-1">
<div id="caixa-suspensa-1">
<button class="button" id="botao-do-radar-1" onclick="funcao_radar_1()">Radar 1</button>
<input type="text" id="barra-de-texto-para-radar-1" style="width: 283px;">
</div>
</form>
<iframe id="iframe-do-radar-1" width="100%" height="282" frameBorder="0" src="">
</iframe>
<script id="script-da-caixa-de-selecao-suspensa-1">
var select_1 = d3.select("#caixa-suspensa-1")
.append("select")
.attr("id","select-box-1")
.style("width","100%");
function caixa_suspensa_1(data) {
select_1
.on("change", function(d) {
var value_1 = d3.select(this).property("value");
document.querySelector('#barra-de-texto-para-radar-1').value = value_1;
var value_1_2 = d3.select(this).property("market");
document.querySelector('#botao-de-jogo-betfair-1').action = value_1_2;
});
let update_1 = select_1.selectAll("option")
.data(data);
update_1.exit().remove();
update_1.enter().append("option").merge(update_1)
.attr("value", d => d.value)
.attr("market", d => d.market)
.text(d => d.label);
}
d3.csv("Lista_de_Jogos.csv", function(data){caixa_suspensa_1(data)});
</script>
<form id="botao-de-jogo-betfair-1" action="" target="_blank">
<input type="submit" style="width: 100%;" value="Jogo Betfair 1"/>
</form>
</div>
</div>
</body>
</html>
生成action="undefined"
值的路径为:
var value_1_2 = d3.select(this).property("market");
document.querySelector('#botao-de-jogo-betfair-1').action = value_1_2;
CSV
file"Lista_de_Jogos.csv"
is:
label,value,market
,,
hotel,bus,party
house,car,work
选择框完美地显示了两个属性:
<option value="car" market="work">house</option>
但是当我选择这个<option> house
,而不是action
的#botao-de-jogo-betfair-1
保持值work
时,他得到值undefined
:
<form id="botao-de-jogo-betfair-1" action="undefined" target="_blank">
<input type="submit" style="width: 100%;" value="Jogo Betfair 1">
</form>
注意:当我尝试使用.property("value");
返回值car
完美。
您正在从select
标签访问market
属性,而不是选择包含market
属性的option
标签。要解决这个问题,您只需要获得已选择的选项,然后使用attr
获取值。
var value_1_2 = d3.select(this.options[this.selectedIndex]).attr("market");
document.querySelector('#botao-de-jogo-betfair-1').action = value_1_2;
你可以做的另一个改进是我们可以给出表单名并使用它从文档
访问表单<form name="myform" action="" method="post" id="formulario-radar-1">
...
</form>
then in javascript
var value_1_2 = d3.select(this.options[this.selectedIndex]).attr("market");
document.forms["myform"].action = value_1_2;
为什么不继续使用D3呢:
var value_1_2 = d3.select(this).property("market");
d3.select('#botao-de-jogo-betfair-1').attr('action', value_1_2);
我想Element中没有action属性。