javascript - 带有 Javascript 选项的下拉列表 HTML 必需元素
问题描述
我对其中一个下拉菜单有疑问,主要是乘客下拉菜单。汽车和乘客元素都附加了 Javascript 操作,汽车计算总成本,它完美运行并具有所需的标签,如果没有选择任何内容,它再次完美运行。乘客更改从汽车中选择的内容,再次完美运行,但是需要标签不起作用,我一直在用头撞墙,坦率地说,我想我的头骨骨折了!:-(我哪里出错了?有人可以帮忙吗?
let passengers = {
"1": [{
value: 0,
desc: ""
}, {
value: 1,
desc: "1 Passenger"
}, {
value: 2,
desc: "2 Passengers"
}, {
value: 3,
desc: "3 Passengers"
}, {
value: 4,
desc: "4 Passengers"
}, {
value: 5,
desc: "5 Passengers"
}],
"2": [{
desc: ""
}, {
value: 1,
desc: "1 Passenger"
}, {
value: 2,
desc: "2 Passengers"
}, {
value: 3,
desc: "3 Passengers"
}, {
value: 4,
desc: "4 Passengers"
}, {
value: 5,
desc: "5 Passengers"
}, {
value: 6,
desc: "6 Passengers"
}, {
value: 7,
desc: "7 Passengers"
}, {
value: 8,
desc: "8 Passengers"
}, {
value: 9,
desc: "9 Passengers"
}, {
value: 10,
desc: "10 Passengers"
}],
"3": [{
desc: ""
}, {
value: 1,
desc: "1 Passenger"
}, {
value: 2,
desc: "2 Passengers"
}, {
value: 3,
desc: "3 Passengers"
}, {
value: 4,
desc: "4 Passengers"
}, {
value: 5,
desc: "5 Passengers"
}, {
value: 6,
desc: "6 Passengers"
}, {
value: 7,
desc: "7 Passengers"
}, {
value: 8,
desc: "8 Passengers"
}, {
value: 9,
desc: "9 Passengers"
}, {
value: 10,
desc: "10 Passengers"
}, {
value: 11,
desc: "11 Passengers"
}, {
value: 12,
desc: "12 Passengers"
}, {
value: 13,
desc: "13 Passengers"
}, {
value: 14,
desc: "14 Passengers"
}, {
value: 15,
desc: "15 Passengers"
}],
}
document.getElementsByName('cars')[0].addEventListener('change', function(e) {
document.getElementsByName('passenger')[0].innerHTML = passengers[this.value].reduce((acc, elem) => `${acc}<option value="${elem.value}">${elem.desc}</option>`, "");
});
function totalise() {
var qtd = document.getElementById('cars').value;
var price = document.getElementById('cost').value;
var result = document.getElementById('total');
result.value = price * qtd;
}
<input type="hidden" name="cost" id="cost" value="50">
<form action="" method="POST">
<div>
<select required="required" name="cars" id="cars" onChange="totalise()">
<option></option>
<option value="1">1 Car</option>
<option value="2">2 Cars</option>
<option value="3">3 Cars</option>
</select>
</div>
<div>
<select required="required" name="passenger" id="passenger">
<option></option>
</select>
</div>
<input type="text" id="total" size="4" readonly>
<div>
<input type="submit" value="submit">
</div>
</form>
解决方案
只需像这样更改您的数组,就像 SimonU 说的那样需要检查空字符串。
必需的属性是一个布尔属性。
如果存在,它指定在提交表单之前必须填写输入字段。
注意: required 属性适用于以下输入类型:文本、搜索、url、电话、电子邮件、密码、日期选择器、数字、复选框、单选和文件。 W3学校
let passengers = {
"1": [{
value:"",
desc: ""
}, {
value: 1,
desc: "1 Passenger"
}, {
value: 2,
desc: "2 Passengers"
}, {
value: 3,
desc: "3 Passengers"
}, {
value: 4,
desc: "4 Passengers"
}, {
value: 5,
desc: "5 Passengers"
}],
"2": [{
value:"",
desc: ""
}, {
value: 1,
desc: "1 Passenger"
}, {
value: 2,
desc: "2 Passengers"
}, {
value: 3,
desc: "3 Passengers"
}, {
value: 4,
desc: "4 Passengers"
}, {
value: 5,
desc: "5 Passengers"
}, {
value: 6,
desc: "6 Passengers"
}, {
value: 7,
desc: "7 Passengers"
}, {
value: 8,
desc: "8 Passengers"
}, {
value: 9,
desc: "9 Passengers"
}, {
value: 10,
desc: "10 Passengers"
}],
"3": [{
value:"",
desc: ""
}, {
value: 1,
desc: "1 Passenger"
}, {
value: 2,
desc: "2 Passengers"
}, {
value: 3,
desc: "3 Passengers"
}, {
value: 4,
desc: "4 Passengers"
}, {
value: 5,
desc: "5 Passengers"
}, {
value: 6,
desc: "6 Passengers"
}, {
value: 7,
desc: "7 Passengers"
}, {
value: 8,
desc: "8 Passengers"
}, {
value: 9,
desc: "9 Passengers"
}, {
value: 10,
desc: "10 Passengers"
}, {
value: 11,
desc: "11 Passengers"
}, {
value: 12,
desc: "12 Passengers"
}, {
value: 13,
desc: "13 Passengers"
}, {
value: 14,
desc: "14 Passengers"
}, {
value: 15,
desc: "15 Passengers"
}],
}
document.getElementsByName('cars')[0].addEventListener('change', function(e) {
document.getElementsByName('passenger')[0].innerHTML = passengers[this.value].reduce((acc, elem) => `${acc}<option value="${elem.value}">${elem.desc}</option>`, "");
});
function totalise() {
var qtd = document.getElementById('cars').value;
var price = document.getElementById('cost').value;
var result = document.getElementById('total');
result.value = price * qtd;
}
<input type="hidden" name="cost" id="cost" value="50">
<form action="" method="POST">
<div>
<select required="required" name="cars" id="cars" onChange="totalise()">
<option></option>
<option value="1">1 Car</option>
<option value="2">2 Cars</option>
<option value="3">3 Cars</option>
</select>
</div>
<div>
<select required="required" name="passenger" id="passenger">
<option></option>
</select>
</div>
<input type="text" id="total" size="4" readonly>
<div>
<input type="submit" value="submit">
</div>
</form>
推荐阅读
- jcl - 使用 JCL 删除多个 PS 文件 - 大型机
- stripe-payments - 如何向客户收费并将资金转入另一个账户
- javascript - 尝试使用 selenium 进行刮擦自动化,但网站可以检测到 selenium
- docker - Read-the-Docs Local Instance:Docs构建成功但找不到错误(404)
- r - 为什么线性回归中的 R^2 受 ggplot2 中 x 轴的比例影响
- notepad++ - Notepad ++在两行之间添加空格
- python - 替换列表中的元素 - 使用包含所述元素的嵌套列表(python3)
- javascript - 如何将小数四舍五入到最接近的 0.5(0.5、1.5、2.5、3.5)
- protocol-buffers - protobuf 是 grpc 中唯一使用的技术吗?
- python-3.x - 框架关闭 Tkinter 的问题