春節前在公司卡很久的自動完成,終於解套啦!(吼)

會碰到這個問題,主要是因為本公司的專案管理系統,在材料成本新增時的廠商欄,會計反應會花很多時間在建立重複的資料上;一開始她建議使用下拉式選單...但是可想而知隨著資料量的增加,這下拉式選單也會變的愈來愈龐大...(汗)剛好前一陣子在研究自動完成,就想把這個應用加在專案管理系統中。關於自動完成,英文絕對沒什麼大問題;重點是中文啊~本來是要自己寫,真正動手以後才發現這個功能不是這麼簡單低。後來熊熊發現網路上有好用的免費資源啊!索性就先借用(?)來試試囉~

起初非常驚訝,沒想到網路上的自動完成功能完善,畫面精美;簡單說就是一整個適合!不過是二個javascript跟一個css就把自動完成做的如此完美,用法也非常簡單!不過高興的情緒並沒有持續太久,我很快的發現到這個自動完成,在IE瀏覽器下對中文不支援!(英文OK)非常出乎意料的該網誌作者註明對firefox不支援...但是我的firefox卻OK;很殘念的會計所慣用的瀏覽器是IE6...就這樣自動完成又走進死胡同。

後來我又花了不少時間在網上尋找適合的lib,期間不經意的發現原來一開始我所找到的免費資源其實是CAPXOUS的破解版;這壓根兒不是什麼免費資源!(汗)我所找到的是v1.3.0的版本,目前最新則是到v1.4.4版本。CAPXOUS本身也有提供程式碼下載以及解說~只不過它既然是個共享程式,廣告自然就少不了囉!最新的版本漂亮許多,當然付費授權的價格也就有點不親切...349 USD。

v1.4.4版也只有幾個檔案,當然重點還是在autocomplete.js、prototype.js以及autocomplete.css上囉!有興趣的人可以直接從CAPXOUS下載位置下載到,程式碼其實還頗複雜本人目前攻力尚淺,是處於一整個看不懂的階段,只好稍微解釋一下連結資料庫時的PHP檔,以及是如何運用在input欄位中的。

主要使用自動完成的頁面,千萬別忘記先導入二個javascript跟一個css:(夾在<head></head>之間)

<script language="JavaScript" src="javascripts/prototype.js" type="text/JavaScript"></script>
<script language="JavaScript" src="javascripts/autocomplete.js" type="text/JavaScript"></script>
<link rel="stylesheet" type="text/css" href="styles/autocomplete.css" />

廠商欄的輸入框:

<input name="supplier" type="text" id="supplier" size="10" />

表格結束後的javascript,導入AJAX:

<script>
 var d = new Date();
 new Autocomplete("supplier", function() {
  return "Suggest.php?msec=" + d.getMilliseconds() + "&type=0&keyword=" + this.value;
 });
</script>

d:特別建立的時間值,利用d.getMilliseconds()取得毫秒後,用以防止瀏覽器在以後只讀快取中的資料而沒有重新查詢。
supplier:input時的id(還是name忘記了...)
type&keyword:要傳入Suggest.php用以查詢資料庫

連結資料庫用的Suggest.php:

<?php
// 利用GET取得變數
$keyword = $_GET['keyword'];
$type = $_GET['type'];

// 連線《Project》資料庫
if($keyword != ''){
  $query = 'SELECT SUPPLIER ' .
           'FROM wh01_project_supplier ' .
           'WHERE SUPPLIER LIKE "' . $keyword . '%"' .
           'AND TYPE = "' . $type . '"';
}
// keyword無值時
else{
  $query = 'SELECT SUPPLIER ' .
           'FROM wh01_project_supplier ' .
           'WHERE SUPPLIER=""';
}
// 執行 SQL query
$result=mysql_query($query,$link);
// 如果$result存在時
if(!empty($result)>0){
  while (list($SUPPLIER) = mysql_fetch_row($result)){
    echo "<li onselect=\"this.text.value = '".$SUPPLIER."';\">\n";
    echo $SUPPLIER."\n";
    echo "</li>\n";
  }
}
// 結束這個連線
mysql_close();

?>

從資料庫取出後只要把結果呈現成:

<li onselect="this.text.value = '結果'; ">
 結果
</li>

就OK囉,最後請看成果

arrow
arrow
    文章標籤
    Augmented Reality AR
    全站熱搜

    danielhuang030 發表在 痞客邦 留言(1) 人氣()