Выбор элемента из первого поля выбора для заполнения второго поля выбора - PullRequest
0 голосов
/ 09 января 2020

У меня есть форма с двумя полями выбора. Первое поле выбора будет содержать список элементов, второе поле выбора будет пустым, но будет заполнено, если выбрать элемент из первого и нажать кнопку добавления. Вы также сможете сделать то же самое. Вы можете выбрать элемент во втором поле выбора и нажать «Удалить», чтобы добавить его обратно в первое поле выбора. В конце я хочу, чтобы все значения второго поля выбора были в скрытом поле формы, разделенном запятыми.

Я встречал примеры этого с javascript в прошлом, но теперь это Мне они нужны, я не могу их найти. Кто-нибудь знает какие-либо источники, которые могли бы показать мне, как сделать что-то вроде этого? Сначала я думал об этом, используя ajax, но я бы предпочел сделать это без загрузки другой страницы. Любая помощь в указании меня в правильном направлении будет принята с благодарностью! Заранее спасибо!

<form name="SelectItem">
<select name="SelectItem">
    <option value="item1">Item 1</option>
    <option value="item2">Item 2</option>
    <option value="item3">Item 3</option>
</select>
<button>Add =></button>
<button><= Remove</button>
<select name="SelectedItems">
    <option value=""></option>

</select>
</form>

Ответы [ 3 ]

2 голосов
/ 09 января 2020

Вы можете использовать jquery append(), чтобы сделать это:

$(document).ready(function(){
  $('.add').click(function(){
    $('#select1').find('option:selected').appendTo('#select2');
  });

  $('.remove').click(function(){
    $('#select2').find('option:selected').appendTo('#select1');
  });  
});

Рабочая ручка

1 голос
/ 09 января 2020

Ниже приведен один относительно простой подход, который вы можете использовать, используя преимущества техники делегирования событий:

const inSelectEl = document.querySelector('#in-item-list');
const outSelectEl = document.querySelector('#out-item-list');
const optionQuantity = inSelectEl.options.length;

const onClick = e => {
  if (e.target.tagName !== 'BUTTON') {
    return;
  }

  let a, b;

  if (e.target.id === 'add') {
    a = inSelectEl;
    b = outSelectEl;
  } else {
    a = outSelectEl;
    b = inSelectEl;
  }

  const selectedOption = a.options[a.selectedIndex];

  b.options[b.options.length] = selectedOption;
}

document.querySelector('#container').addEventListener('click', onClick);
<!-- Added container to enable event delegation -->
<div id="container">
  <select name="SelectItem" id="in-item-list">
    <option value="item1">Item 1</option>
    <option value="item2">Item 2</option>
    <option value="item3">Item 3</option>
  </select>
  <button id="add">Add =></button>
  <button id="remove"><= Remove</button>
  <select name="SelectedItems" id="out-item-list" />
</div>
1 голос
/ 09 января 2020

Вы можете использовать методы add() и remove() для элемента select:

const select1 = document.getElementById('select1')
const select2 = document.getElementById('select2')

const addItem = () => {
    event.preventDefault();

    if(select1.length === 0)    return;

    let itemIndex = select1.selectedIndex;
    let item = select1.options[itemIndex];

    select1.remove(itemIndex)
    select2.add(item);  
}

const removeItem = () => {
    event.preventDefault();

    if(select2.length === 0)    return;

    let itemIndex = select2.selectedIndex;
    let item = select2.options[itemIndex];

    select2.remove(itemIndex)
    select1.add(item);   
}

document.getElementById('addButton').addEventListener('click', addItem);
document.getElementById('removeButton').addEventListener('click', removeItem);
<form name="SelectItem">
  <select name="SelectItem" id="select1">
      <option value="item1">Item 1</option>
      <option value="item2">Item 2</option>
      <option value="item3">Item 3</option>
  </select>

  <button id="addButton">Add =></button>
  <button id="removeButton"><= Remove</button>

  <select name="SelectedItems" id="select2">

  </select>
</form>
...