2012-03-22 43 views
0
  • 名稱不中自動完成
  • 的下拉框中顯示我怎麼可以指定每個變量到一個特定的文本框,當我得到的迴應

HTML:我無法顯示從jquery的自動完成JSON的變量

<!DOCTYPE html> 
<html> 
<head> 
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> 
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script> 
</head> 
<body style="font-size:62.5%;"> 
<input type="text" id="name" /> 
<input type="text" id="id" /> 
<input type="text" id="tel" /> 
<script> $("#name").autocomplete({ source: "php/company.php" }); </script> 
</body> 
</html> 

PHP:

$term = strtolower($_GET["term"]); 

$sql = "select ID,NAME,TEL from COMPANY where NAME like '%$term%' order by NAME"; 
$result = mysql_query($sql, DBCONN) or die ("<br>MySQL Error: " . mysql_error(DBCONN)); 
while($row = mysql_fetch_array($result)) 
{ 
    $row_set = array( 
       "label" => $row['NAME'], 
       "id" => $row['ID'], 
       "tell" => $row['TEL']); 
} 
echo json_encode($row_set); 

螢火JSON響應:

{"label":"MacDonald","id":"1","tel":"1-800-4444"} 

回答

0

RTFM

從本地數據的數據,URL或回調可以有兩種 變種:

  • 字符串數組:
  • 的數組具有標籤和值屬性的對象

你的json響應不是真的是一個數組,是嗎?您也只能更新一個字段的自動填充。

$("#name").autocomplete({ source: function callback(term, autocomplete) { 
    $.getJSON("php/company.php?term="+term, function(data) { 
     // do the magic here: extract an option array from your data, e.g. 
     var arrayOfStrings = data.names; 
     autocomplete(arrayOfStrings); 
    }); 
}); 

我不明白你想用其他的數據做什麼,尋找您將無法自動完成電話號碼輸入字段,將您具體的名字你的數據庫是什麼時候?


編輯:你的問題是,你的JSON響應目前並輸出的最後一個匹配的名稱爲對象。如果您將返回一個數組,則自動完成功能將非常有用。修正了幾項錯誤:

$term = mysql_real_escape_string(strtolower($_GET["term"])); 

$sql = "select ID,NAME,TEL from COMPANY where NAME like '%$term%' order by NAME"; 
$result = mysql_query($sql, DBCONN) or die ("{\"error\":\"" . mysql_error(DBCONN) . "\"}"); 
$output = array(); 
while($row = mysql_fetch_array($result)) { 
    $row_set = array( 
     "label" => $row['NAME'], 
     "value" => $row['NAME'], 
     "id" => $row['ID'], 
     "tell" => $row['TEL']); 
    $output[] = $row_set; 
} 
echo json_encode($output); 

如果你使其與調整Ajax調用(見上文)的自定義回調函數,你可以現在試圖提取陣列之前檢查data.error

現在你可能想玩自定義項目顯示,焦點和選擇事件。例如與

+0

當我得到公司名稱時,我想要將電話號碼也顯示在電話的文本框中 – nouky 2012-03-22 12:08:00

+0

自動完成的感覺是獲取不止一個(公司)名稱 - 您想要什麼處理多個ID /電話號碼? – Bergi 2012-03-22 13:22:08

+0

我想將公司的電話和身份證傳遞給其他人。 Tnxx爲你的答案是有幫助的! – nouky 2012-03-22 18:55:07

0

默認情況下,插件期望字符串,而不是對象的數組。您需要使用custom data rendering

$("#name").autocomplete({ 
     .... 
     focus: function(event, ui) { 
      $("#name").val(ui.item.label); 
      return false; 
     } 
     .... 
    }) 
    .data("autocomplete")._renderItem = function(ul, item) { 
     return $("<li></li>") 
      .data("item.autocomplete", item) 
      .append("<a>" + item.label + "<br>" + item.id + "</a>") 
      .appendTo(ul); 
    }; 
+0

我改變了我的代碼,但仍然沒有任何反應,也許錯誤是在我的PHP響應? '$( 「輸入#自動完成」) \t .autocomplete({ \t \t源: 「PHP/company.php」, \t \t的minLength:0, \t \t焦點:功能(事件,UI){ \t \t \t $( 「#autocomplete」).VAL(ui.item.label); \t \t \t返回FALSE; \t \t},\t \t \t \t \t select:function(event,ui){(「#autocomplete」).val(ui.item.label); \t \t \t return false; \t \t \t} \t \t }) \t。數據( 「自動填充」)._ renderItem =函數(UL,項目){ \t \t返回$( 「

  • 」) \t \t \t。數據(「項。自動完成」,項目) \t \t \t .append( 「」 + item.label + 「
    」 + item.desc + 「
    」) \t \t \t。 appendTo(ul); \t};' – nouky 2012-03-22 12:27:25