LoginSignup
0
0

More than 3 years have passed since last update.

インクリメンタルサーチの実装手順について

Posted at

背景

インクリメンタルサーチの実装に手こずったため備忘録を残したく、書いた。

手順

1.API側の準備。(ルーティング、アクション、jbuilderファイル作成、記述)
※API="何か"と"何か"をつなぐもの

2.テキストフィールド作成

3.jsファイルを作成し、テキストフィールドに入力されるたびにイベント発火する処理を記述。
[例]

users.js

$(function() {
  $("テキストフィールドのセレクタ").on("keyup", function() {
    var input = $("テキストフィールドのセレクタ").val();
  });
});

4.イベント時に非同期通信が出来るようにする。
[例]

users.js
$.ajax({
  type: "GET",
  url: "/users",
  data: { keyword: input },
  dataType: "json"
})

5.非同期通信の結果を得て、HTMLを作成。

6.エラー時の処理を記述。

[記述例]

users.js

$(function() {
// 該当ありの場合に発動させる関数
  function addUser(user) {
    let html = `
    追加したいHTMLを記述する。(クラス名はscssに対応したやつor新たに作る)
      <div class="chat-group-user clearfix">
        <p class="chat-group-user__name">${user.name}</p>
        <div class="user-search-add chat-group-user__btn chat-group-user__btn--add" data-user-id="${user.id}" data-user-name="${user.name}">追加</div>
      </div>
    `;
    $("#user-search-result").append(html);
  }

// 該当なしの場合に発動させる関数
  function addNoUser() {
    let html = `
      <div class="chat-group-user clearfix">
        <p class="chat-group-user__name">ユーザーが見つかりません</p>
      </div>
    `;
    $("#user-search-result").append(html);
  }

// テキストフィールドに入力される度にイベント発火
  $("#user-search-field").on("keyup", function() {
// 入力された内容を変数に入れる
    let input = $("#user-search-field").val();
// 非同期通信の記述
    $.ajax({
      type: "GET",
      url: "/users",
      data: { keyword: input },
      dataType: "json"
    })
      // 成功した場合
      .done(function(users) {
      // 表示していた一覧の中身削除
        $("#user-search-result").empty();
      // 文字が入力された場合に該当ユーザーを表示する関数使用
        if (users.length !== 0) {
          users.forEach(function(user) {
            addUser(user);
          });
      // 文字が入力されていない場合は何も表示しない
        } else if (input.length == 0) {
          return false;
      // そのほかの場合、見つかりませんと表示する関数を使用
        } else {
          addNoUser();
        }
      })
      // 失敗した場合
      .fail(function() {
        alert("通信エラーです。ユーザーが表示できません。");
      });
  });
});

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0