天天看点

select multiple 回显时选中的靠前

作者:九天特派员

当希望在回显 <select> 元素的多选项时,已选中的选项靠前显示,我们可以使用 JavaScript 对选项进行排序。以下是一个 HTML 和 JavaScript 示例,说明如何在回显时将选中的选项排在前面:

<!DOCTYPE html>
<html>
  <head>
    <title>HTML Multi-select Re-display Example</title>
    <script>
      function restoreSelectedOptions() {
        // 以逗号分隔的已选择选项值的字符串,实际应用中可能从服务器或本地存储获取
        var selectedOptions = "option1,option3";
        var selectedOptionsArray = selectedOptions.split(",");

        // 获取<select>元素
        var selectElement = document.getElementById("options");

        // 遍历选项并设置选中状态
        for (var i = 0; i < selectElement.options.length; i++) {
          if (selectedOptionsArray.includes(selectElement.options[i].value)) {
            selectElement.options[i].selected = true;
          }
        }

        // 将选中的选项移动到前面
        sortSelectedOptions(selectElement);
      }

      function sortSelectedOptions(selectElement) {
        var options = Array.from(selectElement.options);

        options.sort(function(a, b) {
          if (a.selected && !b.selected) return -1;
          if (!a.selected && b.selected) return 1;
          return 0;
        });

        options.forEach(function(option) {
          selectElement.appendChild(option);
        });
      }
    </script>
  </head>
  <body onload="restoreSelectedOptions()">
    <form>
      <label for="options">选择你的选项:</label>
      <select id="options" name="options" multiple>
        <option value="option1">选项 1</option>
        <option value="option2">选项 2</option>
        <option value="option3">选项 3</option>
        <option value="option4">选项 4</option>
      </select>
      <input type="submit" value="提交">
    </form>
  </body>
</html>
           

在此示例中,我们添加了一个名为 sortSelectedOptions 的 JavaScript 函数,该函数接受一个 <select> 元素作为参数。该函数首先将选项列表转换为数组,然后使用 Array.prototype.sort() 方法对选项进行排序。排序函数首先检查选项的 selected 属性,将选中的选项排在前面,未选中的选项排在后面。

最后,options.forEach 循环将排序后的选项重新添加到 <select> 元素中。

注意:此方法会更改选项的原始顺序。如果你希望保留选项的原始顺序,请在获取选项值之前存储它们的顺序,并在需要时按原始顺序恢复。

继续阅读