emma1278-my / HorrorBurn

0 stars 0 forks source link

映画検索のオートコンプリート #124

Open emma1278-my opened 3 months ago

emma1278-my commented 3 months ago

JavaScriptを使用

def autocomplete query = params[:query] movies = Movie.where('title LIKE ?', "%#{query}%").limit(10) render json: movies.map(&:title) end end

resources :movies do get :autocomplete, on: :collection end

document.addEventListener("DOMContentLoaded", function() { const searchInput = document.querySelector('input[name="looking_for"]'); const autocompleteList = document.createElement('ul'); autocompleteList.classList.add('autocomplete-list'); searchInput.parentNode.appendChild(autocompleteList);

searchInput.addEventListener('input', function() { const query = this.value;

if (query.length < 2) {
  autocompleteList.innerHTML = '';
  return;
}

fetch(`/movies/autocomplete?query=${query}`)
  .then(response => response.json())
  .then(data => {
    autocompleteList.innerHTML = '';
    data.forEach(item => {
      const listItem = document.createElement('li');
      listItem.textContent = item;
      listItem.classList.add('autocomplete-item');
      listItem.addEventListener('click', function() {
        searchInput.value = item;
        autocompleteList.innerHTML = '';
      });
      autocompleteList.appendChild(listItem);
    });
  });

}); });

.autocomplete-list { position: absolute; z-index: 1000; background-color: white; border: 1px solid #ccc; width: 100%; list-style-type: none; padding: 0; margin: 0; }

.autocomplete-item { padding: 8px; cursor: pointer; }

.autocomplete-item:hover { background-color: #f0f0f0; }