【发布时间】:2018-11-22 03:42:21
【问题描述】:
我有一个 html 表格,其中包含输入文本字段和下拉列表作为列。
我有两个下拉列表列,它们显示相同的选项列表。
我正在尝试删除在一个下拉菜单中选择的选项,但未显示 在同一行中的另一个下拉列表中,当我从 Select Product1 下拉列表中选择一个选项时该下拉列表正在工作。
我面临的问题是当用户第一次从Select Product2 列下拉列表中选择选项时,它不会从该行的Select Product1 列列表中删除选项。
另一个问题是,如果用户在下拉列表中选择了一个选项,则该选项在另一个下拉列表中被删除,如果用户从第一个下拉列表中更改所选选项,则应显示删除的元素/available 在另一个下拉列表中,但它没有显示第一个选择的选项,因为它已从列表中删除。
关于这两个问题的任何意见都会有所帮助,我试图找到解决方案但没有运气。
代码:
//populate dropdown with the valu`enter code here`e
function populateSelect() {
var ids = [{"pid":"laptop","des":"laptop"},{"pid":"Mobile","des":"Mobile"},{"pid":"IPAD mini.","des":"IPAD mini."},
{"pid":"toys","des":"toys"},{"pid":"electronics","des":"electronics"},{"pid":"desktop","des":"desktop"},{"pid":"ipad Air","des":"ipad Air"}]
var productDropdown1 = $(".product1");
var productDropdown2 = $(".product2");
$.each(ids, function(index,value) {
$("<option />").text(value.des).val(value.pid).appendTo(productDropdown1);
$("<option />").text(value.des).val(value.pid).appendTo(productDropdown2);
});
$('select').change(function() {
var $sel = $(this),
val = $sel.val();
$sel.parent().siblings().find('.product2 option[value=' + val + ']').remove()
});
}
$(document).ready(function(){
populateSelect();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="orderTable" border="1">
<tr>
<th>Or.ID</th>
<th>Select Product1</th>
<th>Description</th>
<th>Select Product2</th>
<th>Comments</th>
</tr>
<tr>
<td><input type="text" name="orderNum" value="" id="orderNum1"></td>
<td>
<select class="product1" id="prod1">
<option value=""></option>
</select>
</td>
<td>
<input type="text" name="description" value="">
</td>
<td>
<select class="product2" id="product2">
<option value=""></option>
</select>
</td>
<td>
<input type="text" name="Comments" value="">
</td>
</tr>
<tr>
<td><input type="text" name="orderNum" value="" id="orderNum2"></td>
<td>
<select class="product1" id="prod2">
<option value=""></option>
</select>
</td>
<td>
<input type="text" name="description" value="">
</td>
<td>
<select class="product2" >
<option value=""></option>
</select>
</td>
<td>
<input type="text" name="Comments" value="">
</td>
</tr>
<tr>
<td><input type="text" name="orderNum" value="" id="orderNum3"></td>
<td>
<select class="product1" id="prod3">
<option value=""></option>
</select>
</td>
<td>
<input type="text" name="description" value="">
</td>
<td>
<select class="product2" >
<option value=""></option>
</select>
</td>
<td>
<input type="text" name="Comments" value="">
</td>
</tr>
<tr>
<td><input type="text" name="orderNum" value="" id="orderNum4"></td>
<td>
<select class="product1" id="prod4">
<option value=""></option>
</select>
</td>
<td>
<input type="text" name="description" value="">
</td>
<td>
<select class="product2" >
<option value=""></option>
</select>
</td>
<td>
<input type="text" name="Comments" value="">
</td>
</tr>
</table>
【问题讨论】:
-
正如我在之前的回答中提到的,第一个问题可以通过对两个选择使用公共类来快速解决。
<select class ="product product1">然后将 jQuery 选择器更改为.product -
@charlietfl - 我按照你的建议尝试了 plnkr.co/edit/vsRuqAn09V7VmDyVjz6k?p=preview 。它仅第一次工作,如果用户取消选择该选项并选择其他选项,则新选择的选项值不会从第二个下拉列表中删除,反之亦然..
-
对。这就是我建议您在页面加载时克隆并存储全套选项的地方。然后您可以过滤存储的集合以查找丢失的内容并将其放回
标签: javascript jquery html html-select