私のサイトには、本のデータベースを検索するための検索ボックスがあります。次のオプションがユーザーに表示されます。
- 検索クエリ(テキスト入力フィールド)
- 検索する場所(現在、アーカイブ、またはすべてのオプションを含む選択フィールド)
- 検索対象(タイトル、著者、所有者、または読者のオプションを含む選択フィールド)
ユーザーが検索フィールドに入力を入力すると、検索時にGoogleが表示するように、本のタイトルの候補が下にポップアップ表示されます。彼らがどのオプションを選択して検索したか(つまり、タイトル、著者など)を確認し、それに応じて提案を表示する方法を知りたいです。
私が使用している現在のコードは次のとおりです。
HTML
<form method='get' action='/main'>
<label for='search'>Search</label>
<div style='position:relative;display:inline;'>
<input type='text' id='search' name='search' onkeyup='showHint(this.value)' autocomplete='off'/>
<div style='display:inline;' id='txtHint'></div>
</div>
<select name='searchIn'>
<option name='searchIn' id='searchIn' value='current' selected>Current</option>
<option name='searchIn' id='searchIn' value='archive'>Archive</option>
<option name='searchIn' id='searchIn' value='all'>All</option>
</select>
<select name='searchBy' onChange='getSearchBy(this.value)'>
<option name='searchBy' id='searchBy' value='Title' selected>By Title</option>
<option name='searchBy' id='searchBy' value='Author'>By Author</option>
<option name='searchBy' id='searchBy' value='Owner'>By Owner</option>
<option name='searchBy' id='searchBy' value='Reader'>By Reader</option>
</select>
<input type='submit' class='submit' value='Submit'/>
</form>
AJAX / Javascript
function getSearchBy(val){
return val;
}
function showHint(str){
var xmlhttp;
if (str.length==0){
document.getElementById('txtHint').innerHTML='';
return;
}
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else{// code for IE6, IE5
xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById('txtHint').innerHTML=xmlhttp.responseText;
}
}
var searchBy = getSearchBy(document.getElementById('searchBy').value);
xmlhttp.open('GET','get_hint.php?q='+str+'&searchBy='+searchBy,true);
xmlhttp.send();
}
ファイル'get_hint.php'はすべての処理を実行し、データベースにクエリを実行し、結果をtxtHint要素のinnerHTMLとして返します...
「作成者別」オプションが選択されている場合、getSearchBy関数は「作成者」を返さないようです。何かアイデアはありますか?
アップデート
これらの答えの多くが正しいかもしれないことを私は知っていますが、私は最も早く到着したものを正しくマークしました。皆様からの迅速な対応に感謝します!