suggest.jsはgoogleサジェストのような入力補完を補助してくれるjavascriptライブラリである。
ここ数日、suggest.jsをつかって携帯メールフォームの「@」以降の補完を作れないかなと思い格闘している。
prototype.jsのForm.Element.Observerつかって、フォームに入力される値を監視しておいて、「@」が入力されたら配列を代入するような。。
前略(CSS設定、prototype.js、suggest.js設定までは公式サイト例と同じ)
---------------------------------------------------------------------
<script type="text/javascript" language="javascript">
<!--
// 補完候補の配列作成
var list = [];
var flag = 0;
var suggest;
// wondowのonloadイベントでSuggestを生成
Event.observe(window,
'load',
function(){
suggest =new IncSearch.SuggestTag("text", "suggest", list,
{dispAllKey: true, prefix: true});
},
false);
//textフォームを監視
window.onload = function(){
new Form.Element.Observer($('text'),1,
function(){
if($("text").value.indexOf("@",0) != -1 && flag == 0)
{
list.clear;
list = [ 'docomo.ne.jp', 'ezweb.ne.jp',
'q.vodafone.ne.jp', 'softbank.ne.jp'];
flag = 1;
}
}
);
}
//-->
</script>
</head>
<body>
<input id="text" type="text" name="pattern" value="" autocomplete="off"
size="40" style="display: block"/>
<!-- 補完候補を表示するエリア -->
<div id="suggest"></div>
</body>
</html>
動かん。というか動くわけがないのか?
suggest.jsのcandidateListあたりを弄れば動きそうなんだが。。
もーつかれました。
2006/11/02 12:32:54*追記
<script type="text/javascript" language="javascript">
<!--
// 補完候補の配列作成
var list = [
[],
['docomo.ne.jp', 'ezweb.ne.jp', 'q.vodafone.ne.jp', 'softbank.ne.jp']
];
var flag = 0;
// wondowのonloadイベントでSuggestを生成
Event.observe(window,
'load',
function(){
var suggest =new IncSearch.SuggestTag("text", "suggest", list[flag],{delim: "@"});
new Form.Element.Observer($('text'),1,
function(){
if($("text").value.indexOf("@",0) != -1 && flag == 0)
{
alert('ok');
flag = 1;
suggest.candidateList = list[flag];
}
}
);
},
false);
//-->
</script>
これで一応動くことには動くんだけど・・・。一番後ろに@がついてしまう。
なんかもっとスマートな方法がありそうなんだが。。