如何在没有任何第三方库的情况下实现多复选框下拉

问题描述 投票:0回答:2

如何在没有任何第三方库的情况下实现多复选框下拉。

我们想要一个带有复选框的下拉菜单,而不是在 jquery 和 javascript 中。我们想要纯粹的服务器端控制 .

drop-down-menu dropdown checkboxlist
2个回答
0
投票

纯服务器端控制意味着您将仅依赖于 HTML 标准。
HTML Select 元素具有 multiple 属性,可让用户选择多个值。
HTML 规范 不需要特定的渲染布局,这让浏览器不受任何限制。大多数时候,选定的选项只是突出显示,加上 multiple 属性使选择元素失去其下拉外观样式(您可以使用 size 属性减少其高度)。

<!-- The second value will be selected initially -->
<p>Maintain <kbd>Ctrl</kbd> key down to select multiple elements</p>
<select name="multi" multiple size="2">
  <option value="value1">Value 1</option> 
  <option value="value2" selected>Value 2</option>
  <option value="value3">Value 3</option>
  <option value="value4">Value 4</option>
  <option value="value5">Value 5</option>
  <option value="value6">Value 6</option>
  <option value="value7">Value 7</option>
  <option value="value8">Value 8</option>
  <option value="value9">Value 9</option>
  <option value="value10">Value 10</option>
</select>

如果您改变主意使用Javascript,您可以实现这个详细答案建议的内容,因为它只需要很少的额外Javascript和CSS,但不需要库。


0
投票
    <div class="dropdown">
      <button id="dropdownButton">Multi-Select</button>
      <div class="dropdown-content" id="checkboxContainer"></div>
    </div>
    
    <select name="multi" multiple size="2" id="multiSelect">
      <option value="value1">Value 1</option> 
      <option value="value2" selected>Value 2</option>
      <option value="value3">Value 3</option>
      <option value="value4">Value 4</option>
      <option value="value5">Value 5</option>
      <option value="value6">Value 6</option>
      <option value="value7">Value 7</option>
      <option value="value8">Value 8</option>
      <option value="value9">Value 9</option>
      <option value="value10">Value 10</option>
    </select>



 .dropdown {
    position: relative;
    display: inline-block;
  }

  .dropdown button {
    width: 100%;
    text-align: left;
  }

  .dropdown-content {
    display: none;
    position: absolute;
    background-color: #f9f9f9;
    min-width: 160px;
    max-height: 200px;
    overflow-y: auto;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
    z-index: 1;
  }

  .dropdown-content label {
    display: block;
    padding: 8px 16px;
  }

  .dropdown-content label:hover {
    background-color: #f1f1f1;
  }

  .dropdown:hover .dropdown-content {
    display: block;
  }

  select[multiple] {
    display: none;
  }



 const multiSelect = document.getElementById('multiSelect');
  const checkboxContainer = document.getElementById('checkboxContainer');
  const dropdownButton = document.getElementById('dropdownButton');

  function updateButtonText() {
    const selectedOptions = Array.from(multiSelect.selectedOptions);
    if (selectedOptions.length === 0) {
      dropdownButton.textContent = 'Multi-Select';
    } else if (selectedOptions.length <= 2) {
      const selectedTexts = selectedOptions.map(option => option.text).join(', ');
      dropdownButton.textContent = selectedTexts;
    } else {
      dropdownButton.textContent = `${selectedOptions.length} items selected`;
    }
  }

  Array.from(multiSelect.options).forEach(option => {
    const label = document.createElement('label');
    const checkbox = document.createElement('input');
    checkbox.type = 'checkbox';
    checkbox.value = option.value;
    checkbox.checked = option.selected;
    checkbox.addEventListener('change', function() {
      option.selected = checkbox.checked;
      updateButtonText();
    });

    label.appendChild(checkbox);
    label.appendChild(document.createTextNode(option.text));
    checkboxContainer.appendChild(label);
  });

  updateButtonText(); // Initial button text update
© www.soinside.com 2019 - 2024. All rights reserved.