jQuery UI API - 自動補完ウィジェット(Autocomplete Widget)

所属カテゴリ

ウィジェット(Widgets)

使用方法

説明:自動補完機能は、ユーザーの入力値に基づいて検索およびフィルタリングを行い、ユーザーが事前定義された値のリストからすばやく見つけて選択できるようにします。

追加されたバージョン:1.8

入力を受け取ることができる任意のフィールドは Autocomplete に変換できます。つまり、<input>要素、<textarea>要素、およびcontenteditableプロパティを持つ要素です。

Autocomplete フィールドにフォーカスを与えるか、そこに文字を入力すると、プラグインは一致するエントリの検索を開始し、選択可能な値のリストを表示します。さらに文字を入力することで、ユーザーはリストをフィルタリングしてより良い一致を得ることができます。

このウィジェットは、以前に選択した値を選択するために使用できます。たとえば、記事のタグを入力したり、アドレス帳からアドレスやメールアドレスを入力したりする場合です。Autocomplete は、都市名を入力してその都市の郵便番号を取得するなど、関連情報を自動入力するためにも使用できます。

データはローカルソースまたはリモートソースから取得できます。ローカルソースは、50 エントリのアドレス帳などの小さなデータセットに適しています。リモートソースは、数百または数千のエントリを持つデータベースなどの大きなデータセットに適しています。カスタムデータソースの詳細については、sourceオプションのドキュメントを参照してください。

キーボード操作

メニューが開いているときは、次のキーボードコマンドを使用できます。

  • UP - フォーカスを前の項目に移動します。最初の項目にある場合は、入力(input)にフォーカスを移動します。入力(input)にある場合は、最後の項目にフォーカスを移動します。
  • DOWN - フォーカスを次の項目に移動します。最後の項目にある場合は、入力(input)にフォーカスを移動します。入力(input)にある場合は、最初の項目にフォーカスを移動します。
  • ESCAPE - メニューを閉じます。
  • ENTER - 現在フォーカスされている項目を選択し、メニューを閉じます。
  • TAB - 現在フォーカスされている項目を選択し、メニューを閉じ、フォーカスを次のフォーカス可能(focusable)な要素に移動します。
  • PAGE UP/DOWN - 1画面分の項目をスクロールします(メニューの高さに基づきます)。

メニューが閉じているときは、次のキーボードコマンドを使用できます。

  • UP/DOWN - 以下の条件を満たす場合、minLengthメニューを開きます。

テーマ化

自動補完ウィジェット(Autocomplete Widget)は、jQuery UI CSS フレームワークを使用して、その外観と感触のスタイルを定義します。自動補完ウィジェット固有のスタイルを使用する必要がある場合は、次の CSS クラス名を使用できます。

  • ui-autocomplete:ユーザーの入力に一致するものを表示するために使用されるメニュー(menu)
  • ui-autocomplete-input:自動補完ウィジェット(Autocomplete Widget)によってインスタンス化された input 要素。

依存関係

補足説明

  • このウィジェットには機能的な CSS が必要です。そうしないと動作しません。カスタムテーマを作成する場合は、ウィジェット固有の CSS ファイルを開始点として使用してください。
  • このウィジェットは要素の値をプログラムで操作するため、要素の値が変更されてもネイティブのchangeイベントはトリガーされません。

クイックナビゲーション

オプション メソッド 拡張ポイント イベント

オプション 型 説明 デフォルト値
appendTo Selector メニューはどの要素に追加されるべきか。この値がnullの場合、入力フィールドの親要素はui-frontclass をチェックします。もしui-frontclass を持つ要素が見つかった場合、メニューはその要素に追加されます。もしui-frontclass を持つ要素が見つからない場合、値に関係なく、メニューは body に追加されます。

注:候補メニューが開いているとき、appendToオプションは変更しないでください。

コード例:

指定されたappendToオプションを持つ autocomplete を初期化します:

$( ".selector" ).autocomplete({ appendTo: "#someElem" });
    

初期化後、appendToオプションを取得または設定します:

// getter
var appendTo = $( ".selector" ).autocomplete( "option", "appendTo" );
 
// setter
$( ".selector" ).autocomplete( "option", "appendTo", "#someElem" );
    
null
autoFocus Boolean もしtrueに設定されている場合、メニューが表示されると最初の項目が自動的にフォーカスを取得します。

コード例:

指定されたautoFocusオプションを持つ autocomplete を初期化します:

$( ".selector" ).autocomplete({ autoFocus: true });
    

初期化後、autoFocusオプションを取得または設定します:

// getter
var autoFocus = $( ".selector" ).autocomplete( "option", "autoFocus" );
 
// setter
$( ".selector" ).autocomplete( "option", "autoFocus", true );
    
false
delay Integer キー入力と検索実行の間の遅延(ミリ秒単位)。ローカルデータの場合、遅延ゼロは意味があります(応答性が高まります)が、リモートデータの場合は負荷が大きくなり、応答性が低下します。

コード例:

指定されたdelayオプションを持つ autocomplete を初期化します:

$( ".selector" ).autocomplete({ delay: 500 });
    

初期化後、delayオプションを取得または設定します:

// getter
var delay = $( ".selector" ).autocomplete( "option", "delay" );
 
// setter
$( ".selector" ).autocomplete( "option", "delay", 500 );
    
300
disabled Boolean もしtrueに設定されている場合、その autocomplete は無効になります。

コード例:

指定されたdisabledオプションを持つ autocomplete を初期化します:

$( ".selector" ).autocomplete({ disabled: true });
    

初期化後、disabledオプションを取得または設定します:

// getter
var disabled = $( ".selector" ).autocomplete( "option", "disabled" );
 
// setter
$( ".selector" ).autocomplete( "option", "disabled", true );
    
false
minLength Integer 検索を実行する前にユーザーが入力する必要がある最小文字数。数項目しかないローカルデータの場合は通常ゼロに設定されますが、1文字の検索で数千の項目が一致する場合は、高い値を設定することが必要です。

コード例:

指定されたminLengthオプションを持つ autocomplete を初期化します:

$( ".selector" ).autocomplete({ minLength: 0 });
    

初期化後、minLengthオプションを取得または設定します:

// getter
var minLength = $( ".selector" ).autocomplete( "option", "minLength" );
 
// setter
$( ".selector" ).autocomplete( "option", "minLength", 0 );
    
1
position Object 候補メニューの位置を関連する input 要素との関係で示します。ofオプションのデフォルトは input 要素ですが、別の配置要素を指定できます。各種オプションの詳細については、jQuery UI ポジション(Position)。

コード例:

指定されたpositionオプションを持つ autocomplete を初期化します:

$( ".selector" ).autocomplete({ position: { my : "right top", at: "right bottom" } });
    

初期化後、positionオプションを取得または設定します:

// getter
var position = $( ".selector" ).autocomplete( "option", "position" );
 
// setter
$( ".selector" ).autocomplete( "option", "position", { my : "right top", at: "right bottom" } );
    
{ my: "left top", at: "left bottom", collision: "none" }
source Array または String または Function( Object request, Function response( Object data ) ) 使用するデータを定義します。必ず指定する必要があります。

使用する変数に関係なく、ラベルは常にテキストとして扱われます。ラベルを html として扱いたい場合は、Scott González の html 拡張を使用できます。デモはsourceオプションのさまざまなバリエーションに焦点を当てています。自分の使用状況に一致するものを見つけて、関連するコードを確認できます。

複数の型をサポートしています:

  • Array:ローカルデータに使用できる配列。次の 2 つの形式をサポートします:
    • 文字列の配列:[ "Choice1", "Choice2" ]
    • 次のプロパティを持つlabelとvalueオブジェクトの配列:[ { label: "Choice1", value: "value1" }, ... ]
    label プロパティは候補メニューに表示されます。ユーザーが項目を選択すると、value が input 要素に挿入されます。1 つのプロパティのみが指定された場合、そのプロパティは label と value の両方として扱われます。たとえば、valuevalue プロパティを提供した場合、value もラベルとして扱われます。
  • String:文字列を使用する場合、Autocomplete プラグインはその文字列が JSON データを返す URL リソースを指していることを期待します。同じホスト上でも、異なるホスト上でもかまいません(JSONP を提供する必要があります)。Autocomplete プラグインは結果をフィルタリングせず、termフィールドを介してクエリ文字列を追加し、サーバー側スクリプトが結果をフィルタリングできるようにします。たとえば、sourceオプションが"http://example.com"に設定され、ユーザーがfooと入力した場合、GET リクエストはhttp://example.com?term=fooになります。データ自体の形式は、前述のローカルデータの形式と同じにすることができます。
  • Function:3番目のバリアントであるコールバック関数は、最大の柔軟性を提供し、任意のデータソースを Autocomplete に接続するために使用できます。コールバック関数は 2 つの引数を受け取ります:
    • 1 つのrequestオブジェクト。このオブジェクトには 1 つのtermプロパティがあり、現在のテキスト入力の値を表します。たとえば、ユーザーが city フィールドに"new yo"、その場合、Autocomplete term は次と同等です。"new yo"。
    • 1 つのresponseコールバック関数で、単一の引数(ユーザーに提案するデータ)を受け取ります。このデータは指定された term に基づいてフィルタリングされ、上記で説明したローカルデータの任意の形式にすることができます。リクエスト中にエラーを処理するためのカスタム source コールバックを提供するために使用します。エラーが発生した場合でも、必ずresponseコールバック関数を呼び出さなければなりません。これにより、ウィジェットが常に正しい状態になることが保証されます。

    ローカルデータをフィルタリングするときは、組み込みの$.ui.autocomplete.escapeRegex関数を使用できます。この関数は文字列引数を受け取り、すべての正規表現文字をエスケープして、結果を安全に渡せるようにします。new RegExp()。

コード例:

指定されたsourceオプションを指定して autocomplete を初期化します:

$( ".selector" ).autocomplete({ source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ] });
    

初期化後、sourceオプションを取得または設定します:

// getter
var source = $( ".selector" ).autocomplete( "option", "source" );
 
// setter
$( ".selector" ).autocomplete( "option", "source", [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ] );
    
none; must be specified

メソッド 戻り値 説明
close() jQuery (plugin only) Autocomplete メニューを閉じます。searchメソッドと組み合わせて使用すると、開いているメニューを閉じるために使用できます。
  • このメソッドは引数を受け付けません。

コード例:

close メソッドを呼び出します:

$( ".selector" ).autocomplete( "close" );
    
destroy() jQuery (plugin only) autocomplete 機能を完全に削除します。これにより、要素は初期化前の状態に戻ります。
  • このメソッドは引数を受け付けません。

コード例:

destroy メソッドを呼び出します:

$( ".selector" ).autocomplete( "destroy" );
    
disable() jQuery (plugin only) autocomplete を無効にします。
  • このメソッドは引数を受け付けません。

コード例:

disable メソッドを呼び出します:

$( ".selector" ).autocomplete( "disable" );
    
enable() jQuery (plugin only) autocomplete を有効にします。
  • このメソッドは引数を受け付けません。

コード例:

enable メソッドを呼び出します:

$( ".selector" ).autocomplete( "enable" );
    
option( optionName ) Object 指定されたoptionNameに関連付けられている現在の値を取得します。
  • optionName
    型:String
    説明:取得するオプションの名前。

コード例:

このメソッドを呼び出します:

var isDisabled = $( ".selector" ).autocomplete( "option", "disabled" );
    
option() PlainObject 現在の autocomplete オプションハッシュを表すキーと値のペアを含むオブジェクトを取得します。
  • このメソッドは引数を受け付けません。

コード例:

このメソッドを呼び出します:

var options = $( ".selector" ).autocomplete( "option" );
    
option( optionName, value ) jQuery (plugin only) 指定されたoptionNameに関連付けられた autocomplete オプションの値を設定します。
  • optionName
    型:String
    説明:設定するオプションの名前。
  • value
    型:Object
    説明:オプションに設定する値。

コード例:

このメソッドを呼び出します:

$( ".selector" ).autocomplete( "option", "disabled", true );
    
option( options ) jQuery (plugin only) autocomplete に 1 つ以上のオプションを設定します。
  • options
    型:Object
    説明:設定するオプションと値のペア。

コード例:

このメソッドを呼び出します:

$( ".selector" ).autocomplete( "option", { disabled: true } );
    
widget() jQuery メニュー要素を含むjQueryオブジェクトを返します。メニュー項目は絶えず作成・破棄されますが、メニュー要素自体は初期化時に作成され、継続的に再利用されます。
  • このメソッドは引数を受け付けません。

コード例:

widget メソッドを呼び出します:

$( ".selector" ).autocomplete( "widget" );
    

拡張ポイント 戻り値 説明
オートコンプリートウィジェット(Autocomplete Widget)はウィジェットファクトリー(Widget Factory)によって作成され、拡張することができます。ウィジェットを拡張するとき、ウィジェットの動作をオーバーライドまたは追加できます。以下に提供するメソッドは拡張ポイントであり、上記のプラグインメソッドと同じ API 安定性を備えています。ウィジェットの拡張の詳細については、ウィジェットファクトリー(Widget Factory)によるウィジェットの拡張.
_renderItem( ul, item ) jQuery Method that controls the creation of each option in the widget's menu. The method must create a new <li> element, append it to the menu, and return it.

Note: At this time the<ul> element created must contain an <a> element for compatibility with the menu widget. See the example below.

  • ul
    型:jQuery
    説明:新しく作成された<li>要素が追加される必要がある<ul>要素。
  • item
    型:Object
    • label
      型:String
      説明:項目に表示される文字列。
    • item
      型:String
      説明:項目が選択されたときに入力フィールドに挿入される値。

コード例:

項目の値を<li>の data 属性として追加します。

_renderItem: function( ul, item ) {
  return $( "<li>" )
    .attr( "data-value", item.value )
    .append( $( "<a>" ).text( item.label ) )
    .appendTo( ul );
}
    
_renderMenu( ul, items ) jQuery (plugin only) このメソッドは、メニューを表示する前にメニューのサイズを調整します。メニュー要素はthis.menu.elementを使用してアクセスできます。
  • ul
    型:jQuery
    説明:ウィジェットのメニューとして使用される空の<ul>要素。
  • items
    型:Array
    説明:ユーザーの入力に一致する項目を含む配列。各項目はlabelとvalueプロパティを持つオブジェクトです。

コード例:

古いメニュー項目に CSS クラス名を追加します。

_renderMenu: function( ul, items ) {
  var that = this;
  $.each( items, function( index, item ) {
    that._renderItemData( ul, item );
  });
  $( ul ).find( "li:odd" ).addClass( "odd" );
}
    
_resizeMenu() jQuery (plugin only) このメソッドは、メニューを表示する前にメニューのサイズを調整します。メニュー要素はthis.menu.elementを使用してアクセスできます。
  • このメソッドは引数を受け付けません。

コード例:

メニューは常に幅 500 ピクセルで表示されます。

_resizeMenu: function() {
  this.menu.element.outerWidth( 500 );
}
    

イベント 型 説明
change( event, ui ) autocompletechange 入力フィールドの値が変更された場合にトリガーされます。
  • event
    型:Event
  • ui
    型:Object
    • item
      型:Object
      説明:メニューから選択された項目。それ以外の場合はプロパティはnull。

コード例:

指定された change コールバックで autocomplete を初期化します:

$( ".selector" ).autocomplete({
  change: function( event, ui ) {}
});
    

autocompletechange イベントにイベントリスナーをバインドします:

$( ".selector" ).on( "autocompletechange", function( event, ui ) {} );
    
close( event, ui ) autocompleteclose メニューが非表示になったときにトリガーされます。すべてのcloseイベントにchangeイベントが伴うわけではありません。
  • event
    型:Event
  • ui
    型:Object

注:uiオブジェクトは空です。他のイベントとの一貫性のために含まれています。

コード例:

指定された close コールバックで autocomplete を初期化します:

$( ".selector" ).autocomplete({
  close: function( event, ui ) {}
});
    

autocompleteclose イベントにイベントリスナーをバインドします:

$( ".selector" ).on( "autocompleteclose", function( event, ui ) {} );
    
create( event, ui ) autocompletecreate autocomplete が作成されたときにトリガーされます。
  • event
    型:Event
  • ui
    型:Object

注:uiオブジェクトは空です。他のイベントとの一貫性のために含まれています。

コード例:

指定された create コールバックで autocomplete を初期化します:

$( ".selector" ).autocomplete({
  create: function( event, ui ) {}
});
    

autocompletecreate イベントにイベントリスナーをバインドします:

$( ".selector" ).on( "autocompletecreate", function( event, ui ) {} );
    
focus( event, ui ) autocompletefocus 焦点が項目(未選択)に移動したときにトリガーされます。デフォルトの動作は、イベントがキーボード操作によってトリガーされた場合でも、テキストフィールドの値をフォーカスされた項目の値に置き換えることです。イベントをキャンセルすると値の更新は防がれますが、メニュー項目がフォーカスを得ることは妨げられません。
  • event
    型:Event
  • ui
    型:Object
    • item
      型:Object
      説明:フォーカスされた項目。

コード例:

指定された focus コールバックで autocomplete を初期化します:

$( ".selector" ).autocomplete({
  focus: function( event, ui ) {}
});
    

autocompletefocus イベントにイベントリスナーをバインドします:

$( ".selector" ).on( "autocompletefocus", function( event, ui ) {} );
    
open( event, ui ) autocompleteopen 提案メニューが開かれたとき、または更新されたときにトリガーされます。
  • event
    型:Event
  • ui
    型:Object

注:uiオブジェクトは空です。他のイベントとの一貫性のために含まれています。

コード例:

指定された open コールバックで autocomplete を初期化します:

$( ".selector" ).autocomplete({
  open: function( event, ui ) {}
});
    

autocompleteopen イベントにイベントリスナーをバインドします:

$( ".selector" ).on( "autocompleteopen", function( event, ui ) {} );
    
response( event, ui ) autocompleteresponse 検索が完了した後、メニューが表示される前にトリガーされます。提案データのローカル操作に使用され、カスタムのsourceオプションコールバックは不要です。このイベントは常に検索完了時にトリガーされます。検索結果がない場合や Autocomplete が無効になっていてメニューが表示されない場合でも、このイベントはトリガーされます。
  • event
    型:Event
  • ui
    型:Object
    • content
      型:Array
      説明:レスポンスデータを含み、表示結果を変更するために修正できます。このデータはすでに標準化されているため、データを変更する場合は、各項目にvalueとlabelプロパティが含まれていることを確認してください。

コード例:

指定された response コールバックを持つ autocomplete を初期化します:

$( ".selector" ).autocomplete({
  response: function( event, ui ) {}
});
    

autocompleteresponse イベントにイベントリスナーをバインドします:

$( ".selector" ).on( "autocompleteresponse", function( event, ui ) {} );
    
select( event, ui ) autocompleteselect メニューから項目を選択したときにトリガーされます。デフォルトの動作は、テキストフィールドの値を選択された項目の値に置き換えることです。このイベントをキャンセルすると値の更新は防がれますが、メニューが閉じることは防がれません。
  • event
    タイプ:Event
  • ui
    タイプ:Object
    • item
      タイプ:Object
      説明:選択された項目のlabelとvalueプロパティを持つオブジェクト。

コード例:

指定された select コールバックを持つ autocomplete を初期化します:

$( ".selector" ).autocomplete({
  select: function( event, ui ) {}
});
    

autocompleteselect イベントにイベントリスナーをバインドします:

$( ".selector" ).on( "autocompleteselect", function( event, ui ) {} );
    

例

例 1:

シンプルな jQuery UI オートコンプリート(Autocomplete)。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>自动完成部件(Autocomplete Widget)演示</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
</head>
<body>
 
<label for="autocomplete">选择一个编程语言:</label>
<input id="autocomplete">
 
<script>
$( "#autocomplete" ).autocomplete({
  source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ]
});
</script>
 
</body>
</html>

例 2:

カスタムソースコールバックを使用して、語句の先頭に一致させます。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>自动完成部件(Autocomplete Widget)演示</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
</head>
<body>
 
<label for="autocomplete">选择一个编程语言:</label>
<input id="autocomplete">
 
<script>
var tags = [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ];
$( "#autocomplete" ).autocomplete({
  source: function( request, response ) {
          var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );
          response( $.grep( tags, function( item ){
              return matcher.test( item );
          }) );
      }
});
</script>
 
</body>
</html>

その他の拡張