追加型jquery.suggest

テキスト入力補完のjQueryライブラリjquery.suggestを追加型にした。
http://www.vulgarisoip.com/2007/06/29/jquerysuggest-an-alternative-jquery-based-autocomplete-library/

入力補完により得られる語句はテキストに上書きされてしまう。
これを追加できるようにしてみた。
このような使い方を望むのは僕だけだろうか・・・。

jquery.suggest 1.1 – 2007-08-06
上記バージョンソースの下記を変更する。

suggest関数の先頭。

/*------------------------------ by systemconcept --------*/
/*var q = $.trim($input.val());*/
/*if (q.length >= options.minchars) {*/
var words = $.trim($input.val());
var q = (options.append)? $.trim(getLastWord(words)): words;
if (words.length >= options.minchars) {
/*--------------------------------------------------------*/

selectCurrentResult関数内。

if ($currentResult) {
	/*------------------------- by systemconcept --------*/
	/*$input.val($currentResult.text());*/
	if (options.append)
		$input.val(cutLastWord($input.val())+
						$currentResult.text());
	else
		$input.val($currentResult.text());
	/*---------------------------------------------------*/
	$results.hide();
	
	if (options.onSelect)
		options.onSelect.apply($input[0]);
}

幾つか関数を追加。

/*------------------------------ by systemconcept --------*/
function cutLastWordIndex(str) {
	var lastindex = -1;
	var delm = options.punctuation;
	for (var key in delm) {
		var d = delm[key]
		for (var i = str.length - 1; i >= 0; i--) {
			if(str.charAt(i) == d) {
				if(lastindex < i) {
					lastindex = i;
					break;
				}
			}
		}
	}
	return lastindex;
}
function cutLastWord(str) {
	var lastindex = cutLastWordIndex(str);
	if(lastindex < 0) {
		return "";
	} else {
		return str.substring(0, lastindex + 1);
	} 
}
function getLastWord(str) {
	var lastindex = cutLastWordIndex(str);
	if(lastindex < 0) {
		return str;
	} else {
		return str.substring(lastindex + 1);
	} 
}
/*--------------------------------------------------------*/

jsソース末尾のパラメータ初期化部分に追加。

/*------------------------------ by systemconcept --------*/
options.append = options.append || false;
options.punctuation = options.punctuation || [' '];
/*--------------------------------------------------------*/

以上で完成。

使い方は以下。

<script type="text/javascript"> 
jQuery(
	function() {
		jQuery("#mytext").suggest(
			"http://localhost/listcontentsget",
			{
				append: true,
				punctuation: [' ', ','],
			}
		);
	}
);
</script>
<input id="mytext" type="text"></input>

パラメータのURLは補完リストの取得URL。
※jquery.suggest関連サイト参照。
append:trueは本機能を有効にする。
punctuationは語句を切り出す句読点。

コメントを残す

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