【问题标题】:how to show the deselected option from the dropdown list in the other available dropdown list of that row in a table - jquery如何在表格中该行的其他可用下拉列表中的下拉列表中显示取消选择的选项 - jquery
【发布时间】:2018-11-22 03:42:21
【问题描述】:

我有一个 html 表格,其中包含输入文本字段和下拉列表作为列。 我有两个下拉列表列,它们显示相同的选项列表。

我正在尝试删除在一个下拉菜单中选择的选项,但未显示 在同一行中的另一个下拉列表中,当我从 Select Product1 下拉列表中选择一个选项时该下拉列表正在工作。

我面临的问题是当用户第一次从Select Product2 列下拉列表中选择选项时,它不会从该行的Select Product1 列列表中删除选项。

另一个问题是,如果用户在下拉列表中选择了一个选项,则该选项在另一个下拉列表中被删除,如果用户从第一个下拉列表中更改所选选项,则应显示删除的元素/available 在另一个下拉列表中,但它没有显示第一个选择的选项,因为它已从列表中删除。

关于这两个问题的任何意见都会有所帮助,我试图找到解决方案但没有运气。

Sample Demo link

代码:

//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>

【问题讨论】:

  • 正如我在之前的回答中提到的,第一个问题可以通过对两个选择使用公共类来快速解决。 &lt;select class ="product product1"&gt; 然后将 jQuery 选择器更改为 .product
  • @charlietfl - 我按照你的建议尝试了 plnkr.co/edit/vsRuqAn09V7VmDyVjz6k?p=preview 。它仅第一次工作,如果用户取消选择该选项并选择其他选项,则新选择的选项值不会从第二个下拉列表中删除,反之亦然..
  • 对。这就是我建议您在页面加载时克隆并存储全套选项的地方。然后您可以过滤存储的集合以查找丢失的内容并将其放回

标签: javascript jquery html html-select


【解决方案1】:

下拉列表中的每个选项都必须有唯一的 ID。当您从下拉菜单“menu1”中选择选项“house”时,然后从“menu2”中删除/隐藏相同的选项(具有相同 ID 的选项)。 另一种方法是每个选项都有onClick,它将调用一些函数。 示例:

<option value="" onclick="hideOption("menu2-option1")" id="menu1-option1">Option 1</option>

<!-- JS CODE -->
function hideOption(hideOptionID)
{
    document.getElementById(hideOptionID).style.display = "none"; 
}

【讨论】:

  • 你不能隐藏&lt;option&gt;跨浏览器。不适用于 IE 和 Safari 等浏览器。事件也一样。那个 onclick 是行不通的。那么当有更简单的方法来定位元素时,给每个选项一个 id 的想法是浪费时间和精力
  • @charlietfl 他可以使用 jQuery .hide() 来隐藏一个元素。这个对我有用。这是第二种方式。
  • 你在 IE 中试过吗?和野生动物园?这是一个多年前的问题,这个网站上有很多关于它的帖子
  • @charlietfl 适用于 Edge 和 Chrome。没有其他浏览器。
  • 什么版本的IE?可能在边缘工作......肯定不是 IE 10,也可能不是 11。是的,它适用于某些...例如chrome和fiefox
【解决方案2】:

最好禁用一个选项而不是从用户界面中删除它。 尝试改变

$('select').change(function() {
        var $sel = $(this),
                val = $sel.val();
        $sel.parent().siblings().find('.product2 option[value=' + val + ']').remove()

});

    $('select').change(function() {    
            var $sel = $(this),
            val = $sel.val();
            //$('select').not($sel).find('option').removeAttr('disabled');
 $sel.parent().siblings().not($sel).find('option').removeAttr('disabled');
        $sel.parent().siblings().find('select option[value=' + val + ']').attr('disabled',true);
        });

DEMO HERE

希望这会有所帮助。

【讨论】:

  • 感谢您的意见。我尝试了您的演示小提琴,当用户选择该选项时它第一次工作,但是当用户第二次更改所选选项时,它不会禁用第二个下拉列表中的相应选项。并且很难删除该选项而不是禁用?输入将非常有帮助。 TIA。
  • 根据文档 .remove() 的意思是“从 DOM 中删除匹配的元素集”,因此删除的选项在 DOM 中的任何地方都不可用,以防万一你想显示.这就是为什么我建议禁用而不是 remove()。
  • 好的,当用户在下拉列表中选择选项时,它会在第二个下拉列表中禁用,但问题是当用户在其他行中填写数据并返回到第一行/旧行时,他可以也可以选择禁用的选项。
  • 你能举个例子吗?
  • 当用户在下拉列表中选择选项时,它会在第二个下拉列表中禁用,但问题是当用户在其他行中填充数据并返回到第一/旧行时,他可以选择也禁用选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 2019-04-24
  • 1970-01-01
相关资源
最近更新 更多