天天看點

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> 元素中。

注意:此方法會更改選項的原始順序。如果你希望保留選項的原始順序,請在擷取選項值之前存儲它們的順序,并在需要時按原始順序恢複。

繼續閱讀