jQuery UI API - 自動補完ウィジェット(Autocomplete Widget)
所属カテゴリ
使用方法
説明:自動補完機能は、ユーザーの入力値に基づいて検索およびフィルタリングを行い、ユーザーが事前定義された値のリストからすばやく見つけて選択できるようにします。
追加されたバージョン: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 に追加されます。注:候補メニューが開いているとき、 コード例: 指定された
$( ".selector" ).autocomplete({ appendTo: "#someElem" });
初期化後、 // getter var appendTo = $( ".selector" ).autocomplete( "option", "appendTo" ); // setter $( ".selector" ).autocomplete( "option", "appendTo", "#someElem" ); |
null |
| autoFocus | Boolean | もしtrueに設定されている場合、メニューが表示されると最初の項目が自動的にフォーカスを取得します。コード例: 指定された
$( ".selector" ).autocomplete({ autoFocus: true });
初期化後、 // getter var autoFocus = $( ".selector" ).autocomplete( "option", "autoFocus" ); // setter $( ".selector" ).autocomplete( "option", "autoFocus", true ); |
false |
| delay | Integer | キー入力と検索実行の間の遅延(ミリ秒単位)。ローカルデータの場合、遅延ゼロは意味があります(応答性が高まります)が、リモートデータの場合は負荷が大きくなり、応答性が低下します。 コード例: 指定された
$( ".selector" ).autocomplete({ delay: 500 });
初期化後、 // getter var delay = $( ".selector" ).autocomplete( "option", "delay" ); // setter $( ".selector" ).autocomplete( "option", "delay", 500 ); |
300 |
| disabled | Boolean | もしtrueに設定されている場合、その autocomplete は無効になります。コード例: 指定された
$( ".selector" ).autocomplete({ disabled: true });
初期化後、 // getter var disabled = $( ".selector" ).autocomplete( "option", "disabled" ); // setter $( ".selector" ).autocomplete( "option", "disabled", true ); |
false |
| minLength | Integer | 検索を実行する前にユーザーが入力する必要がある最小文字数。数項目しかないローカルデータの場合は通常ゼロに設定されますが、1文字の検索で数千の項目が一致する場合は、高い値を設定することが必要です。 コード例: 指定された
$( ".selector" ).autocomplete({ minLength: 0 });
初期化後、 // getter var minLength = $( ".selector" ).autocomplete( "option", "minLength" ); // setter $( ".selector" ).autocomplete( "option", "minLength", 0 ); |
1 |
| position | Object | 候補メニューの位置を関連する input 要素との関係で示します。ofオプションのデフォルトは input 要素ですが、別の配置要素を指定できます。各種オプションの詳細については、jQuery UI ポジション(Position)。コード例: 指定された
$( ".selector" ).autocomplete({ position: { my : "right top", at: "right bottom" } });
初期化後、
// 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 拡張を使用できます。デモは 複数の型をサポートしています:
コード例: 指定された
$( ".selector" ).autocomplete({ source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ] });
初期化後、 // 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に関連付けられている現在の値を取得します。
コード例: このメソッドを呼び出します: var isDisabled = $( ".selector" ).autocomplete( "option", "disabled" ); |
| option() | PlainObject | 現在の autocomplete オプションハッシュを表すキーと値のペアを含むオブジェクトを取得します。
コード例: このメソッドを呼び出します: var options = $( ".selector" ).autocomplete( "option" ); |
| option( optionName, value ) | jQuery (plugin only) | 指定されたoptionNameに関連付けられた autocomplete オプションの値を設定します。
コード例: このメソッドを呼び出します: $( ".selector" ).autocomplete( "option", "disabled", true ); |
| option( options ) | jQuery (plugin only) | autocomplete に 1 つ以上のオプションを設定します。
コード例: このメソッドを呼び出します:
$( ".selector" ).autocomplete( "option", { disabled: true } );
|
| search( [value ] ) | jQuery (plugin only) | トリガーsearchイベント。このイベントがキャンセルされていない場合はデータソースを呼び出します。クリックされたとき、選択ボックス風のボタンが提案を開くために使用できます。引数なしでこのメソッドを呼び出すと、現在の入力値が使用されます。空文字列とminLength: 0を指定して呼び出すと、すべての項目を表示できます。
コード例: search メソッドを呼び出します: $( ".selector" ).autocomplete( "search", "" ); |
| 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
コード例: 項目の値を
_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を使用してアクセスできます。
コード例: 古いメニュー項目に 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 | 入力フィールドの値が変更された場合にトリガーされます。
コード例: 指定された change コールバックで autocomplete を初期化します:
$( ".selector" ).autocomplete({
change: function( event, ui ) {}
});
autocompletechange イベントにイベントリスナーをバインドします:
$( ".selector" ).on( "autocompletechange", function( event, ui ) {} );
|
| close( event, ui ) | autocompleteclose | メニューが非表示になったときにトリガーされます。すべてのcloseイベントにchangeイベントが伴うわけではありません。
注: コード例: 指定された close コールバックで autocomplete を初期化します:
$( ".selector" ).autocomplete({
close: function( event, ui ) {}
});
autocompleteclose イベントにイベントリスナーをバインドします:
$( ".selector" ).on( "autocompleteclose", function( event, ui ) {} );
|
| create( event, ui ) | autocompletecreate | autocomplete が作成されたときにトリガーされます。
注: コード例: 指定された create コールバックで autocomplete を初期化します:
$( ".selector" ).autocomplete({
create: function( event, ui ) {}
});
autocompletecreate イベントにイベントリスナーをバインドします:
$( ".selector" ).on( "autocompletecreate", function( event, ui ) {} );
|
| focus( event, ui ) | autocompletefocus | 焦点が項目(未選択)に移動したときにトリガーされます。デフォルトの動作は、イベントがキーボード操作によってトリガーされた場合でも、テキストフィールドの値をフォーカスされた項目の値に置き換えることです。イベントをキャンセルすると値の更新は防がれますが、メニュー項目がフォーカスを得ることは妨げられません。
コード例: 指定された focus コールバックで autocomplete を初期化します:
$( ".selector" ).autocomplete({
focus: function( event, ui ) {}
});
autocompletefocus イベントにイベントリスナーをバインドします:
$( ".selector" ).on( "autocompletefocus", function( event, ui ) {} );
|
| open( event, ui ) | autocompleteopen | 提案メニューが開かれたとき、または更新されたときにトリガーされます。
注: コード例: 指定された open コールバックで autocomplete を初期化します:
$( ".selector" ).autocomplete({
open: function( event, ui ) {}
});
autocompleteopen イベントにイベントリスナーをバインドします:
$( ".selector" ).on( "autocompleteopen", function( event, ui ) {} );
|
| response( event, ui ) | autocompleteresponse | 検索が完了した後、メニューが表示される前にトリガーされます。提案データのローカル操作に使用され、カスタムのsourceオプションコールバックは不要です。このイベントは常に検索完了時にトリガーされます。検索結果がない場合や Autocomplete が無効になっていてメニューが表示されない場合でも、このイベントはトリガーされます。
コード例: 指定された response コールバックを持つ autocomplete を初期化します:
$( ".selector" ).autocomplete({
response: function( event, ui ) {}
});
autocompleteresponse イベントにイベントリスナーをバインドします:
$( ".selector" ).on( "autocompleteresponse", function( event, ui ) {} );
|
| search( event, ui ) | autocompletesearch | 検索の実行前に満たされたminLengthとdelay後にトリガーされます。このイベントをキャンセルした場合、リクエストは送信されず、候補項目も提供されません。
注意: コード例: 指定された search コールバックを持つ autocomplete を初期化します:
$( ".selector" ).autocomplete({
search: function( event, ui ) {}
});
autocompletesearch イベントにイベントリスナーをバインドします:
$( ".selector" ).on( "autocompletesearch", function( event, ui ) {} );
|
| select( event, ui ) | autocompleteselect | メニューから項目を選択したときにトリガーされます。デフォルトの動作は、テキストフィールドの値を選択された項目の値に置き換えることです。このイベントをキャンセルすると値の更新は防がれますが、メニューが閉じることは防がれません。
コード例: 指定された 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>
その他の拡張