【问题标题】:How to move selected items from one dropdown group list (optgroup)to another dropdown group list (optgroup) using jquery?如何使用 jquery 将所选项目从一个下拉组列表(optgroup)移动到另一个下拉组列表(optgroup)?
【发布时间】:2015-06-04 07:51:24
【问题描述】:

我有两个下拉分组列表 (Optgroup)。我想使用向右移动、向左移动按钮在这两个 html 控件之间交换项目。我可以从左侧下拉分组列表项目中选择一个或多个项目,然后单击向右移动按钮。在这种情况下,我可以将所选项目移动到右侧下拉分组列表。但是项目不会像左侧下拉分组列表那样作为分组列表插入。

这是我的 html 控件。

<select name="AvailableFields" id="AvailableFields" multiple="multiple" size="10">
<option value="">Please select</option>
<optgroup label="Group A">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</optgroup>
<optgroup label="Group B">
<option value="a">A</option>
<option value="b">B</option>
<option value="c">C</option>
</optgroup>
</select>

<button type="button" title="Forward" id="btnRight">Move Right</button>
<button type="button" title="Backward" id="btnLeft">Move Left</button>

<select name="FieldstoBeMatchedOn" id="FieldstoBeMatchedOn" multiple="multiple" size="10">
</select>

我编写了以下代码将项目从左侧下拉分组列表移动到右侧下拉分组列表。

<script type="text/javascript">
    $(document).ready(function () {
defaultListBind = function (e) {
            var selectedOpts = $('#FieldstoBeMatchedOn');
            alert(selectedOpts);
            $('#FieldstoBeMatchedOn').append($(selectedOpts).clone());
            $(selectedOpts).remove();
            //e.preventDefault();
        }
        // defaultListBind();

        $('#btnRight').click(function (e) {
            var selectedOpts = $('#AvailableFields option:selected');
            if (selectedOpts.length == 0) {
                alert("Nothing to move.");
                e.preventDefault();
            }

            $('#FieldstoBeMatchedOn').append($(selectedOpts).clone());
            $(selectedOpts).remove();
            defaultSelect();
            e.preventDefault();
        });

        $('#btnLeft').click(function (e) {
            var selectedOpts = $('#FieldstoBeMatchedOn option:selected');
            if (selectedOpts.length == 0) {
                alert("Nothing to move.");
                e.preventDefault();
            }

            $('#AvailableFields').append($(selectedOpts).clone());
            $(selectedOpts).remove();
            defaultSelect();
            e.preventDefault();
        });
defaultSelect = function () {
            $("#FieldstoBeMatchedOn option").each(function () {
                $(this).prop("selected", true);
            });
        }
    });
</script>

如何以分组或类别格式将项目从左侧下拉列表移动到右侧下拉列表?

JSfiddle

非常感谢您在高级方面的帮助。

【问题讨论】:

  • 删除不需要的`});`
  • 使用标识 (===) 运算符而不是相等 (==) 运算符 bcoz == 运算符将在进行任何必要的类型转换后比较相等。 === 运算符不会进行转换,因此如果两个值的类型不同,=== 将简单地返回 false。

标签: javascript jquery html css optgroup


【解决方案1】:

这个怎么样。你必须想办法在右侧没有任何东西的情况下删除组

 $(document).ready(function () {    
$('#btnRight').click(function (e) {
                var selectedOpts = $('#AvailableFields option:selected');
                if (selectedOpts.length == 0) {
                    alert("Nothing to move.");
                    e.preventDefault();
                }

    if(selectedOpts.parent().attr('label') == "Group A"){
        $('#FieldstoBeMatchedOn').append($('<optgroup label="Group A">')).append($(selectedOpts).clone());
                $(selectedOpts).remove();
                defaultSelect();
                e.preventDefault();
    }
    else{
        $('#FieldstoBeMatchedOn').append($('<optgroup label="Group B">')).append($(selectedOpts).clone());
                $(selectedOpts).remove();
                defaultSelect();
                e.preventDefault();
    }
            });

            $('#btnLeft').click(function (e) {
                var selectedOpts = $('#FieldstoBeMatchedOn option:selected');
                if (selectedOpts.length == 0) {
                    alert("Nothing to move.");
                    e.preventDefault();
                }

                $('#AvailableFields').append($(selectedOpts).clone());
                $(selectedOpts).remove();
                defaultSelect();
                e.preventDefault();
            });
    defaultSelect = function () {
                $("#FieldstoBeMatchedOn option").each(function () {
                    $(this).prop("selected", true);
                });
            }
        });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<select name="AvailableFields" id="AvailableFields" multiple="multiple" size="10">
    <option value="">Please select</option>
    <optgroup label="Group A">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    </optgroup>
    <optgroup label="Group B">
    <option value="a">A</option>
    <option value="b">B</option>
    <option value="c">C</option>
    </optgroup>
    </select>

    <button type="button" title="Forward" id="btnRight">Move Right</button>
    <button type="button" title="Backward" id="btnLeft">Move Left</button>

    <select name="FieldstoBeMatchedOn" id="FieldstoBeMatchedOn" multiple="multiple" size="10">
    </select>

【讨论】:

  • 向左移动,不在匹配组中插入值。
猜你喜欢
  • 2022-07-16
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
相关资源
最近更新 更多