2012/01/11
=> English version
第1引数にAjax送信先のファイル名を、
第2引数にオプションを設定します。
$('#ac01_01').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'prefectures',
'order_field' : 'id'
}
);
"per_page"オプションで、候補リストの表示数を、
"navi_num"オプションで、隣接ページの表示数を変更できます。
$('#ac01_02').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'users',
'per_page' : 20,
'navi_num' : 10,
}
ComBoxの幅をできるだけ狭くしたい場合、"navi_simple"オプションで
先頭・末尾のページへのリンクを非表示にできます。
なお、キーボードのショートカットは有効のままです。(Shift + 右・左)
$('#ac01_03').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'users',
'navi_num' : 1,
'navi_simple' : true
}
カンマ区切りでフィールド名を指定することで、
同じテーブルの中の複数のフィールドから検索できます。
試しに、下のボックスに『23』と入力してみてください。
$('#ac01_04').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'prefectures',
'search_field': 'name, id'
}
);
スペース区切りで複数の言葉で検索した場合、
デフォルトではAND検索となりますが、OR検索にすることもできます。
試しに、下のボックスに『道 島』と入力してみてください。
$('#ac01_05').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'prefectures',
'and_or' : 'OR'
}
);
同一名の候補がある場合、右側にサブ情報を表示させて
それぞれを区別することができます。
"sub_info"オプションを真にするだけです。
$('#ac02_01').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'employee_ja',
'sub_info' : true
}
);
何も設定しないと、サブ情報の表の項目名は、データベースの
カラム名が表示されてしまいます。
"sub_as"オプションで、表示名を変更できます。
$('#ac02_02').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'employee_ja',
'sub_info' : true,
'sub_as' : {
'id' : '社員番号',
'post' : '部署',
'position' : '役職'
}
}
);
"show_field"オプションで設定します。
カンマ区切りで、複数のカラム名を指定します。
オプションでの記述の順番でカラムを取得します。
$('#ac02_03').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'employee_ja',
'sub_info' : true,
'sub_as' : {
'post' : '部署',
'position' : '役職'
},
'show_field' : 'position,post'
}
);
"hide_field"オプションで設定します。
複数のカラムを取得する場合の記述のルールは
"show_field"オプションと同じです。
$('#ac02_04').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'employee_ja',
'sub_info' : true,
'sub_as' : {
'id' : '社員番号'
},
'hide_field' : 'position,post'
}
);
候補を選択した際、
テキストボックスの『sub_info』という独自の属性に
JSON形式でサブ情報が格納されるので、他で利用することが可能です。
var result = 'サブ情報\n';
var json = $('#ac_02_05').attr('sub_info');
var obj = eval( '(' + json + ')' );
for(var key in obj){
result += key + ' : ' + obj[key] + '\n';
}
alert(result);
リストからの選択しか受け付けません。
リストにない値を入力した場合、また、選択後に
文字列を削除・追加した場合、入力エリアが赤くなります。
$('#ac03_01').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'employee_ja',
'sub_info' : true,
'select_only' : true
}
);
なお、このオプションを設定すると、フォームで送信されるのは
"primary_key"オプションで設定したカラムの値になります。
この値は、候補リストの<li>要素のid属性にもなります。
テキストボックスと同じname属性を持つ隠しフィールド(hidden)を
生成し、リストから選択した場合のみ、"primary_key"の値を
hiddenのvalue属性に設定しています。
//テキストボックス
<input id="ac03_01" name="ac03_01_1" type="text" />
//候補リスト
...
<li id="A014" class="">佐藤</li>
<li id="A011" class="ac_over">佐藤</li>
<li id="A008" class="">佐藤</li>
...
//隠しフィールド
<input type="hidden" name="ac03_01" value="A011"/>
セレクト専用時のデフォルトでは、データベースのテーブルの
"id"カラムを探し、その値をフォーム送信に用います。
これを、"primary_key"オプションで変更することができます。
$('#ac03_02').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'prefectures',
'order_field' : 'id',
'show_field' : 'id',
'sub_info' : true,
'select_only' : true,
'primary_key' : 'name'
}
);
ComboBoxに初期値を設定します。
$('#ac04_01').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'prefectures',
'order_field' : 'id',
'init_val' : '東京都'
}
);
$('#ac04_02').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'prefectures',
'order_field' : 'id',
'select_only' : true,
'primary_key' : 'id',
'init_val' : 13
}
);
データベースもサーバサイド言語も使わず、JSON形式のデータを検索します。
JSON形式のデータは、下記のようなオブジェクト配列にする必要があります。
var data = [
{'id':'A001','name':'田中','post':'営業部','position':'一般'},
{'id':'A002','name':'佐藤','post':'営業部','position':'一般'},
{'id':'A003','name':'鈴木','post':'総務部','position':'係長'},
{'id':'A004','name':'佐藤','post':'総務部','position':'課長'},
...
];
Ajax通信するサーバサイドのファイル名の代わりに、
JSON形式のオブジェクト配列を指定します。
$('#ac05_01').ajaxComboBox(
data,
{
'sub_info' : true,
'sub_as' : {
'id' : '社員番号',
'post' : '部署',
'position' : '役職'
},
'select_only' : true,
'init_val' : ['A009'],
'primary_key' : 'id'
}
);
『bind()』メソッドを使うことで、候補選択直後に何らかの処理を実行することができます。
$('#ac06_01').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'prefectures',
'order_field' : 'id',
'bind_to' : 'foo'
}
)
.bind('foo', function(){
alert($(this).val() + ' が選択されました');
});
テキストボックスをフォームタグで囲まず、Enterキーが押された場合の
イベントハンドラを独自に用意している場合、候補をEnterキーで選ぶと
イベントが重複して実行されてしまいます。
それを防ぐため、プラグインの独自イベントが発火する際に、
Enterキーで候補が選ばれた場合はtrueとなる引数を追加しました。
$('#ac06_02').ajaxComboBox(
'acbox/php/ajaxComboBox.php',
{
'db_table' : 'prefectures',
'order_field' : 'id',
'bind_to' : 'foo'
}
)
.bind('foo', function(e, is_enter_key){
if(!is_enter_key){
alert($(this).val() + ' が選択されました(マウスで選択)');
}
})
.keydown(function(e){
if(e.keyCode == 13) alert($(this).val() + ' が選択されました(Enterキーで選択)');
});
Author : sutara_lumpur /
Blog /
Twitter /