autoComplete.jsを使ってみる

フォームの入力補完ができるJavaScriptのライブラリ「autoComplete.js」を使ってみます。

対応ブラウザ

対応ブラウザは公式ドキュメント内に記載がありますが、基本的に各ブラウザの最新バージョンのみの対応で、IEは非対応となっているようです。

設定方法

まずは使用するファイルを読み込みます。
今回はCDNを使用します。

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tarekraafat/autocomplete.js@7.2.0/dist/css/autoComplete.min.css">
<script src="https://cdn.jsdelivr.net/npm/@tarekraafat/autocomplete.js@7.2.0/dist/js/autoComplete.min.js"></script>

入力補完するinput要素を用意します。

<input id="autoComplete">

デフォルトの結果一覧が左右中央位置に配置されてしまうので、marginを消しておきます。

#autoComplete_list {
	margin: 0;
}

入力補完で使用するリスト(配列)を用意します。

var nameList = [
	'satou', 'suzuki', 'tanaka', 'takahashi', 'itou', 'yamamoto', 'watanabe', 'nakamura', 'kobayashi', 'katou',
	'yoshida', 'yamada', 'sasaki', 'yamaguchi', 'matsumoto', 'inoue', 'kimura', 'hayashi', 'saitou', 'shimizu',
	'yamazaki', 'abe', 'mori', 'ikeda', 'hashimoto', 'yamashita', 'ishikawa', 'nakajima', 'maeda', 'fujita',
	'gotou', 'ogawa', 'okada', 'murakami', 'hasegawa', 'kondou', 'ishii', 'sakamoto', 'endou', 'fujii'
];

先程の配列を使ってライブラリの設定を行います。

var autoCompletejs = new autoComplete({
	data: {
		src: nameList
	},
	resultsList: {
		render: true
	}
});

これで入力補完できるようになりました。
入力補完のデモページ

配列の中身は文字列でなくオブジェクトでも動作します。

var nameList = [
	{
		"name": "satou",
		"from": "Tokyo"
	}, {
		"name": "suzuki",
		"from": "Hokkaido"
	}, {

	〜 略 〜

	}, {
		"name": "fujii",
		"from": "Tokyo"
	}
];

配列の中身をオブジェクトにする場合、対象のキーを指定する必要があります。

var autoCompletejs = new autoComplete({
	data: {
		src: nameList,
		key: ['name', 'from']
	},
	resultsList: {
		render: true
	}
});

この場合、nameかfromで入力補完ができます。
入力補完のデモページ2

次に、データが日本語でも問題ないかどうか試してみます。

var nameList = [
	'愛園愛美', '相羽ういは', '赤羽葉子', '朝日南アカネ', '飛鳥ひな', '安土桃', '天宮こころ', '雨森小夜', 'アルス・アルマル', 'アンジュ・カトリーナ',

	〜 略 〜

	'リゼ・ヘルエスタ', '緑仙', '竜胆尊', 'ルイス・キャミー', 'レヴィ・エリファ', '童田明治'
];

ライブラリの設定は最初と同じです。
確認してみた限り、日本語でも特に問題なさそうでした。
日本語での入力補完のデモページ2

オプション

用意されているオプションをいくつか試してみます。
詳しくは公式のドキュメントをご確認ください。

data 入力補完に使用するデータの設定。
オブジェクト形式でsrcにデータの配列を指定、keyにキーの指定、cacheにキャッシュを使用するかどうか(true/false)を指定。
デモページ
trigger 入力補完の発火タイミングの設定。
デモページ
query 入力文字列の置き換えの設定。
デモページ
sort 結果の並び順変更の設定。
デモページ
placeHolder inputのプレースホルダーの設定。
デモページ
selector 入力補完を設定するinput要素を指定。
デモページ
threshold 結果の表示を開始するまでの文字数を設定。
デモページ
debounce 文字を入力してから結果を切り替えるまでの時間を設定。
デモページ
searchEngine 検索モードの指定。
strict: 厳密な検索。
loose: 緩めの検索。
デモページ
resultsList 結果のリストに関する設定。
デモページ
resultItem 結果のアイテムに関する設定。
デモページ
noResults 結果が0件だった場合の設定。
デモページ
highlight 結果の一致部分にハイライトを入れるかどうかを設定。
デモページ
maxResults 結果表示の上限数を設定。
デモページ
onSelection 入力補完を選択した時の処理を設定。
デモページ

フォーカスを外した時に入力補完を非表示にする

ライブラリはデフォルトだとinputからフォーカスを外した際に、入力補完のリストが消えないようです。
公式のデモ内にリストを非表示にする処理があったので、試してみます。

var autoCompletejs = new autoComplete({
	data: {
		src: nameList
	},
	resultsList: {
		render: true
	}
});

// フォーカス時にリスト表示・フォーカスを外した時にリストを非表示にする
["focus", "blur"].forEach(function(eventType) {
	var resultsList = document.querySelector("#autoComplete_list");
	document.querySelector("#autoComplete").addEventListener(eventType, function() {
		if (eventType === "blur") {
			resultsList.style.display = "none";
		} else if (eventType === "focus") {
			resultsList.style.display = "block";
		}
	});
});

フォーカスを外した時にリストを非表示にするデモページ

参考サイト

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年12月
1234567
891011121314
15161718192021
22232425262728
293031