jQuery UIのautocompleteを使って、入力補完を実装してみます。
ダウンロード
jQuery UIを使用する場合、ダウンロードして使用する方法とCDNから読み込む方法があります。
ダウンロードの場合、jQuery UI公式サイトにアクセスしてCustom Downloadをクリックします。
ページ下部の「Theme」を選択して、Downloadをクリックします。
Themeに関してはThemesの一覧ページでTheme毎の見た目を確認できます。
画面左のGalleryタブから選択してください。
今回はCDNから読み込む方法で、Themeは「Smoothness」を使用してみます。
jQuery UIを利用する準備
読み込むファイルは以下の2点です。
- jquery-ui.css
- jquery-ui.js
ダウンロードして使用する場合、一緒に入っているimagesディレクトリをjquery-ui.cssと同じディレクトリに置いてください。
jQuery本体と合わせて、必要なファイルを読み込みます。
HTML
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" /> <script src="//code.jquery.com/jquery-1.10.2.js"></script> <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
Themeを変更したい場合は、CSS読み込みURLの「smoothness」を違うThemeに変更して下さい。
autocompleteの実装
必須の項目のみ設定して、シンプルなautocompleteを実装してみます。
HTML
<input type="text" id="search" placeholder="半角英字で入力">
JavaScript
$(function() { // autocompleteで使用する値候補 var name = [ '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' ]; $('#search').autocomplete({ source: name }); });
nameで格納している各値が入力値の候補になります。
autocompleteのデモページ
source | 入力補完に使用するデータを定義する。必須。 |
---|
autocompleteのオプション
JavaScript
$(function() { // autocompleteで使用する値候補 var name = [ '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' ]; $('#search').autocomplete({ source: name, appendTo: '#menu', autoFocus: true, delay: 800, minLength: 2, position: { my: 'left top', at: 'right bottom' } }); $('#disabled').on('click', function() { $('#search').autocomplete('option', 'disabled', true); }); });
appendTo | メニューの追加する位置を指定。 初期値はnull。 |
---|---|
autoFocus | メニュー表示時に1番目の項目がフォーカスされた状態にする。 初期値はfalse。 |
delay | キー入力後、検索が実行されるまでの待ち時間を指定。 初期値は300。 |
disabled | autocompleteを無効にする。 初期値はfalse。 |
minLength | 検索を開始する最小文字数を指定する。 初期値は1。 |
position | 表示位置を指定する。 myはメニューの位置、atは対象要素(input)の位置を指定。 値の詳細はこちらを参照。 初期値は{ my: “left top”, at: “left bottom”, collision: “none” }。 |
autocompleteのメソッド
JavaScript
$(function() { // autocompleteで使用する値候補 var name = [ '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' ]; $('#search').autocomplete({ source: name, }); $(window).on('keydown', function(e) { if(e.keyCode === 17) { // スペースキークリックでメニューを閉じる $('#search').autocomplete('close'); return false; } }); $('#destroy').on('click', function() { $('#search').autocomplete('destroy'); }); $('#disable').on('click', function() { $('#search').autocomplete('disable'); }); $('#enable').on('click', function() { $('#search').autocomplete('enable'); }); $('#instance').on('click', function() { console.log($('#search').autocomplete('instance')); }); $('#delayget').on('click', function() { console.log($('#search').autocomplete('option', 'delay')); }); $('#delayset').on('click', function() { $('#search').autocomplete('option', 'delay', 1000); }); $('#ooptionsset').on('click', function() { $('#search').autocomplete('option', { minLength: 2, autoFocus: true }); }); $('#optionget').on('click', function() { console.log($('#search').autocomplete('option')); }); $('#sa').on('click', function() { $('#search').focus(); $('#search').autocomplete('search', 'sa'); }); $('#widget').on('click', function() { console.log($('#search').autocomplete('widget')); }); });
close() | メニューを閉じる。 |
---|---|
destroy() | autocomplete機能を削除する。 |
disable() | autocompleteを無効化する。 |
enable() | autocompleteを有効にする。 |
instance() | autocompleteのインスタンスオブジェクトを取得する。 |
option(optionName) | optionNameの値を取得する。 |
option() | optionのキーと値をセットにして取得する。 |
option(optionName, value) | 指定したoptionNameにvalueを設定する。 |
option(options) | 指定した複数のoptionに値を設定する。 |
search([value]) | 検索イベントがキャンセルされていない状態(inputにフォーカスがある状態)の時、valueでの入力補完をメニューに表示する。 |
widget() | メニュー要素を含むjQueryオブジェクトを返す。 |
autocompleteのイベント
JavaScript
$(function() { // autocompleteで使用する値候補 var name = [ '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' ]; $('#search').autocomplete({ source: name, change: function(event, ui) { console.log('change'); }, close: function(event, ui) { console.log('close'); }, create: function(event, ui) { console.log('create'); }, focus: function(event, ui) { console.log('focus'); }, open: function(event, ui) { console.log('open'); }, response: function(event, ui) { console.log('response'); }, search: function(event, ui) { console.log('search'); }, select: function(event, ui) { console.log('select'); }, }); });
change(event, ui) | inputからフォーカスが外れたときに、値が変更されていたら処理を行う。 |
---|---|
close(event, ui) | メニューが非表示になったときに処理を行う。 |
create(event, ui) | autocompletecreateが作成されたときに処理を行う。 |
focus(event, ui) | メニューにフォーカスが当たった時に処理を行う。 |
open(event, ui) | メニューを開くか更新されたときに処理を行う。 |
response(event, ui) | 検索完了後、メニューが表示される前に処理を行う。 |
search(event, ui) | 検索を行う前に処理を行う。 |
【参考サイト】
コメントが承認されるまで時間がかかります。