Press "Enter" to skip to content

使用jQuery实现带有远程搜索和加载状态的多选示例。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<!DOCTYPE html>
<html>
<head>
<title>多选示例</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css">
<style>
.selected {
background-color: yellow;
}
</style>
</head>
<body class="container">
<h2 class="mt-4">多选示例</h2>
<div class="form-group mt-3">
<input type="text" class="form-control" id="searchInput" placeholder="搜索...">
</div>
<div class="mt-3" id="loading" style="display: none;">加载中...</div>
<ul class="list-group mt-3" id="results"></ul>
<p class="mt-3">已选择:</p>
<ul class="list-group" id="selectedItems"></ul>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script>
$(document).ready(function() {
const searchInput = $('#searchInput');
const loading = $('#loading');
const results = $('#results');
const selectedItems = $('#selectedItems');
let selected = [];
searchInput.on('input', function() {
const searchTerm = $(this).val();
// 显示加载状态
loading.show();
results.empty();
// 模拟远程搜索,这里使用setTimeout来模拟延迟
setTimeout(function() {
// 模拟从服务器获取数据
const data = getRemoteData(searchTerm);
renderResults(data);
loading.hide();
}, 1000);
});
// 添加或移除已选择项
results.on('click', 'li', function() {
const item = $(this).text();
if (selected.includes(item)) {
selected = selected.filter(val => val !== item);
$(this).removeClass('list-group-item-primary');
} else {
selected.push(item);
$(this).addClass('list-group-item-primary');
}
updateSelectedItems();
});
function renderResults(data) {
results.empty();
data.forEach(function(item) {
const listItem = $('<li class="list-group-item">').text(item);
if (selected.includes(item)) {
listItem.addClass('list-group-item-primary');
}
results.append(listItem);
});
}
function updateSelectedItems() {
selectedItems.empty();
selected.forEach(function(item) {
selectedItems.append($('<li class="list-group-item">').text(item));
});
}
function getRemoteData(searchTerm) {
// 模拟从服务器获取数据
const data = [
'选项1',
'选项2',
'选项3',
'选项4',
'选项5',
'选项6',
];
// 过滤匹配搜索条件的项
return data.filter(item => item.toLowerCase().includes(searchTerm.toLowerCase()));
}
});
</script>
</body>
</html>
<!DOCTYPE html> <html> <head> <title>多选示例</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css"> <style> .selected { background-color: yellow; } </style> </head> <body class="container"> <h2 class="mt-4">多选示例</h2> <div class="form-group mt-3"> <input type="text" class="form-control" id="searchInput" placeholder="搜索..."> </div> <div class="mt-3" id="loading" style="display: none;">加载中...</div> <ul class="list-group mt-3" id="results"></ul> <p class="mt-3">已选择:</p> <ul class="list-group" id="selectedItems"></ul> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script> <script> $(document).ready(function() { const searchInput = $('#searchInput'); const loading = $('#loading'); const results = $('#results'); const selectedItems = $('#selectedItems'); let selected = []; searchInput.on('input', function() { const searchTerm = $(this).val(); // 显示加载状态 loading.show(); results.empty(); // 模拟远程搜索,这里使用setTimeout来模拟延迟 setTimeout(function() { // 模拟从服务器获取数据 const data = getRemoteData(searchTerm); renderResults(data); loading.hide(); }, 1000); }); // 添加或移除已选择项 results.on('click', 'li', function() { const item = $(this).text(); if (selected.includes(item)) { selected = selected.filter(val => val !== item); $(this).removeClass('list-group-item-primary'); } else { selected.push(item); $(this).addClass('list-group-item-primary'); } updateSelectedItems(); }); function renderResults(data) { results.empty(); data.forEach(function(item) { const listItem = $('<li class="list-group-item">').text(item); if (selected.includes(item)) { listItem.addClass('list-group-item-primary'); } results.append(listItem); }); } function updateSelectedItems() { selectedItems.empty(); selected.forEach(function(item) { selectedItems.append($('<li class="list-group-item">').text(item)); }); } function getRemoteData(searchTerm) { // 模拟从服务器获取数据 const data = [ '选项1', '选项2', '选项3', '选项4', '选项5', '选项6', ]; // 过滤匹配搜索条件的项 return data.filter(item => item.toLowerCase().includes(searchTerm.toLowerCase())); } }); </script> </body> </html>
<!DOCTYPE html>
<html>
<head>
  <title>多选示例</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css">
  <style>
    .selected {
      background-color: yellow;
    }
  </style>
</head>
<body class="container">
  <h2 class="mt-4">多选示例</h2>
  <div class="form-group mt-3">
    <input type="text" class="form-control" id="searchInput" placeholder="搜索...">
  </div>
  <div class="mt-3" id="loading" style="display: none;">加载中...</div>
  <ul class="list-group mt-3" id="results"></ul>
  <p class="mt-3">已选择:</p>
  <ul class="list-group" id="selectedItems"></ul>
  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
  <script>
    $(document).ready(function() {
      const searchInput = $('#searchInput');
      const loading = $('#loading');
      const results = $('#results');
      const selectedItems = $('#selectedItems');
      let selected = [];

      searchInput.on('input', function() {
        const searchTerm = $(this).val();
        // 显示加载状态
        loading.show();
        results.empty();

        // 模拟远程搜索,这里使用setTimeout来模拟延迟
        setTimeout(function() {
          // 模拟从服务器获取数据
          const data = getRemoteData(searchTerm);
          renderResults(data);
          loading.hide();
        }, 1000);
      });

      // 添加或移除已选择项
      results.on('click', 'li', function() {
        const item = $(this).text();
        if (selected.includes(item)) {
          selected = selected.filter(val => val !== item);
          $(this).removeClass('list-group-item-primary');
        } else {
          selected.push(item);
          $(this).addClass('list-group-item-primary');
        }
        updateSelectedItems();
      });

      function renderResults(data) {
        results.empty();
        data.forEach(function(item) {
          const listItem = $('<li class="list-group-item">').text(item);
          if (selected.includes(item)) {
            listItem.addClass('list-group-item-primary');
          }
          results.append(listItem);
        });
      }

      function updateSelectedItems() {
        selectedItems.empty();
        selected.forEach(function(item) {
          selectedItems.append($('<li class="list-group-item">').text(item));
        });
      }

      function getRemoteData(searchTerm) {
        // 模拟从服务器获取数据
        const data = [
          '选项1',
          '选项2',
          '选项3',
          '选项4',
          '选项5',
          '选项6',
        ];

        // 过滤匹配搜索条件的项
        return data.filter(item => item.toLowerCase().includes(searchTerm.toLowerCase()));
      }
    });
  </script>
</body>
</html>
发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注