javascript - 用javascript填充一个选择,从之前的选择中减去一个值
问题描述
我有一个带有两个输入的表单,用户必须从两个不同的集合中选择一个数字。第一个是从 1 到 100。第二个是从 1 到 500,但我只需要显示在第一个输入中选择的数字之上的剩余值。假设我有一个这样的脚本:
<?php
echo "<form action='process.php' method='post'>";
echo "<select id='first_set' name='first_set'>";
echo "<option value='' disabled selected hidden>select how many</option>";
for ($i = 1; $i <= 100; $i ++) {
echo "<option value='" . $i . "'>" . $i . "</option>";
}
echo "</select>";
echo "<select id='second_set' name='second_set'>";
?>
<script type="text/javascript">
$(document).ready(function(){
$('#first_set').on('change',function(){
var numFirstSet = $(this).val();
if(numFirstSet){
var topSecondSet = 500;
var numRemaining = topSecondSet - numFirstSet;
for (var a = numRemaining; a < topSecondSet; a ++) {
var numToDisplay = a;
$('#second_set').html('<option value="numToDisplay">numToDisplay</option>');
}
}else{
$('#second_set').html('<option value="">Select first a value from the set before!</option>');
}
});
});
</script>
<?php
// the submit button
echo "</form>";
?>
但它不起作用。second_set 选择可悲地显示单词“numToDisplay”,而不是计算值(var numToDisplay),也不是文本“首先从之前的集合中选择一个值!”。
编辑:经过一些建议,我尝试过
$('#second_set').html('<option value="' + numToDisplay + '">' + numToDisplay + '</option>');
但得到了一个奇怪的结果:在 first_set 中完成选择后,显示了 numToDisplay 值,但它始终为 499。即 topSecondSet - 1 !而且没有一套价值观。
我试图找出解决方案并编写了以下代码:
<script type="text/javascript">
$(document).ready(function(){
$('#first_set').on('change',function(){
var sel_box = document.getElementById("second_set");
var numFirstSet = $(this).val();
sel_box.selectedIndex = 0;
if(numFirstSet){
var topSecondSet = 100;
var startNum = numFirstSet + 1;
for (var a = startNum; a <= topSecondSet; a ++) {
var numToDisplay = a;
var option = document.createElement("option");
option.text = numToDisplay;
sel_box.add(option);
}
}else{
var selectfirstText = "Select first a value from the set before!";
sel_box.html = '<option value="">' + selectfirstText + '</option>';
}
});
});
</script>
现在 second_set 在 first_set 更改后填充,但有两个问题:
1) second_set 中的项目从 numFirstSet*10 而不是 numFirstSet+1 开始;
2) 每次在 first_set 选择中进行更改时,都会添加一组新选项而不是替换前一组选项,尽管该行
sel_box.selectedIndex = 0;
其目标是在添加新选项之前重置选项。
3)代码
var selectfirstText = "Select first a value from the set before!";
sel_box.html = '<option value="">' + selectfirstText + '</option>';
没有输出,它根本不起作用。
有解决上述三个问题的想法吗?
解决方案
这是一个附加一个不使用 Jquery 的孩子的解决方案。看看 Emiel Zuurbiers 的评论。我也会小心使用,if(numFirstSet)
因为如果值为 0,它将评估为假。我认为您的预期结果应该在 document.ready 之后进行检查,而不是在 onchange 函数中进行检查。这样你的“选择第一个值”选项在运行时就在那里。
let firstSet = document.getElementById("first_set");
$(document).ready(function() {
if (firstSet.value === "null") {
$("#second_set").html(
'<option value="">Select first a value from the set before!</option>'
);
}
$("#first_set").on("change", function() {
var numFirstSet = parseInt($(this).val());
// console.log(numFirstSet);
$("#second_set").html("");
var topSecondSet = 50;
var numRemaining = topSecondSet - numFirstSet;
for (var a = numRemaining; a < topSecondSet; a++) {
let opt = document.createElement("option");
opt.innerHTML = a;
opt.value = a;
document.getElementById("second_set").append(opt);
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="first_set">
<option selected disabled value="null">Nothing</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<br /><br />
<select id="second_set"> </select>
推荐阅读
- oracle - 我正在寻找一种在 Oracle SQL Developer 中搜索某个单词的方法
- python - 在 NLP 中提取包括连字符在内的复合名词的麻烦
- python - Appium双击
- python - 我在 Django shell 中的查询工作正常但无法工作查看文件
- python - python打包pdfkit:将HTML转换为PDF,如何取消自动换行
- sql - 需要 SQL 脚本来检查长时间的操作会话以及运行超过 15 分钟的 CPU 消耗
- c# - 我可以使用以与我的程序不同的语言编写的库吗?
- azure-devops - 仅当某个目录中的文件发生更改时,如何在新 PR 上运行管道
- java - 如何使用 Jax-RS 客户端实现方括号参数?
- azure-active-directory - 我们可以使用同一 Azure 帐户的其他目录用户登录吗