簡體   English   中英

如何在兩個列表框之間移動項目?

[英]How to move items between two listboxes?

    <div class="data_wrap list-padding">
    <div class="approveTermsContainer">
        <div class="newItems"> <b>send</b>
            <br />
            <select multiple="multiple" id='lstBox1'>
                    <ul class="tree" multiple="multiple" id='lstBox1'>
                <li>
                    <div class="btn-group" data-toggle="buttons"> </div> <a href="">heading test</a>
                    <ul>
                        <li>
                            <div class="btn-group" data-toggle="buttons"> </div> test <span rel="tooltip" data-toggle="tooltip" data-trigger="hover" data-placement="right" data-html="true" data-title="This is my tooltip!"><i class="fa fa-info-
circle"></i></span> </li>
                    </ul>
                </li>
            </ul>
      </select>
        </div>
        <div class="transferBtns">
            <input type='button' id='btnRight' value='  >  ' />
            <br />
            <input type='button' id='btnLeft' value='  <  ' /> </div>
        <div class="approvedItems"> <b>receive</b>
            <br />
            <select multiple="multiple" id='lstBox2'> </select>
        </div>
    </div>
</div>

在上面的代碼中,我有兩個列表框。 即,listbox1,listbox2。 在哪里選擇 listboxes1 項目(標題測試),然后選擇 btn。 它必須移動到listbox2。

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

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

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

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

上面是jquery代碼,我試過了。 我在這里附上我的codepen代碼嗎?

https://codepen.io/dhanunjayt/pen/GRxMpBX

您的 JS 代碼是正確的,並且也有效。

您應該更改 select 元素中的 HTML 。

這是一些代碼作品演示

<select multiple id='lstBox1'>
   <option value="1">foo</option>
   <option value="2">bar</option>
</select>

在 HTML 代碼中,第一個 SELECT 元素有一個子元素,即 UL 元素。 據我所知,SELECT 元素的子元素是 OPTION 元素。 SELECT 元素內不應有 UL 元素。

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select

每個菜單選項都由嵌套在 <select> 中的元素定義。 [...] 您可以在元素內進一步嵌套 <option> 元素,以在下拉菜單中創建單獨的選項組。

此外,您有具有相同 ID 的不同元素,並且代碼中沒有 OPTION 元素。

可能$('#lstBox1 option:selected'); 沒有按預期工作,因為:

  • 元素<select multiple="multiple" id='lstBox1'><ul class="tree" multiple="multiple" id='lstBox1'>具有相同的 ID ( lstBox1 );
  • HTML 代碼中沒有 OPTION 元素( option:selected從不匹配);

當我嘗試驗證 HTML時,我收到了這些錯誤消息(除了其他錯誤消息):

重復 ID lstBox1。

從第 6 行第 12 列開始; 到第 6 行第 61 列

 <ul class="tree" multiple="multiple" id='lstBox1'>

[...]

雜散開始標記 ul。

從第 6 行第 12 列開始; 到第 6 行第 61 列

 ul class="tree" multiple="multiple" id='lstBox1'>

[...]

在此上下文中,元素 select 中不允許出現文本。

從第 8 行第 70 列開始; 到第 8 行第 81 列

<a href="">heading test</a>

元素 select 的內容 model:零個或多個選項、optgroup 和腳本支持元素。

改變

UL 元素在 SELECT 元素內部不可見,至少在 Firefox 中是不可見的。

將 UL 列表更改為 OPTION 元素,選項是可見的,您可以在不更改 jQuery 代碼的情況下移動它們。

<div class="data_wrap list-padding">
    <div class="approveTermsContainer">
        <div class="newItems"> <b>send</b>
            <br />
        <select multiple="multiple" id='lstBox1'>
            <optgroup label="heading test">
                <option value="test">test</option>
            </optgroup>
        </select>
        </div>
        <div class="transferBtns">
            <input type='button' id='btnRight' value='  >  ' />
            <br />
            <input type='button' id='btnLeft' value='  <  ' /> </div>
        <div class="approvedItems"> <b>receive</b>
            <br />
            <select multiple="multiple" id='lstBox2'> </select>
        </div>
    </div>
</div>

我使用這個邏輯來做到這一點,它對我來說效果很好,只需將字符串附加到 select "<option>your selected option</option>"

<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>     
    </head>
    <body>
       <select id="l1">
        <option value="1">1</option>
        <option value="2">2</option>
       </select>
       <input type="button" id="btn" value="click">
       <select id="l2"></select>
    </body>
</html>
<script>
    $("#btn").click(function(){
        debugger;
        value = $("#l1").find(":selected").attr('value');
        var appends='<option value="' +value + '">' + value + '</option>';
        $("#l2").empty();
        $("#l2").append(appends);
    })
 </script>

我檢查了你的代碼它正在工作,只需刪除<optgroup><li> ,讓它變得簡單

<select multiple="multiple" id='lstBox1'>
     <option value="test">test</option>
     <option value="test2">test2</option>
     <option value="test3">test3</option>
</select>

你可以實現你正在尋找的東西。 您需要進行一些更改。

這是一個應該如何構建以及應該如何表現的示例。

<select multiple id="list_1">
    <option id="option_a">Option A</option>
    <option id="option_b">Option B</option>
    <option id="option_c">Option C</option>
</select>
<select multiple id="list_2">
    //
</select>
<script>
    function clickRight() {
        var list = document.querySelector("#list_1").children;
        var numOptions = list.length;
        for (var i = 0; i < numOptions; i++) {
            var option = list[i];
            if (option.selected) {
                document.querySelector("#list_2").appendChild(list.splice(i, 1));
                numOptions—;
                i—;
            }
        }
    }
</script>

您還需要編寫clickLeft function。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM