我只想单独处理id
列的值,以便在mySQL的隐藏字段中使用它。但是,当我提取n ame,surname,id
时,它们会出现在搜索文本字段中,同时显示id
值。 我只想在隐藏字段的值区域中使用id。只有Name,Surname必须出现在文本字段中。如何立即将id的值设置为隐藏字段?
autocomplete.php
<?php
include 'config/db.connect.php';
$return_arr = array();
if (isset($_GET['term'])){
try {
$stmt = $db->prepare('SELECT id,user_username,name,surname FROM user WHERE name LIKE :receiver or surname LIKE :receiver or user_username LIKE :receiver');
$stmt->execute(array('receiver' => '%'.$_GET['term'].'%'));
while($row = $stmt->fetch()) {
$return_arr['name'] = $row['name'];
$return_arr['surname']= $row['surname'];
$return_arr['id']= $row['id'];
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
echo json_encode($return_arr);
}
?>
我的表单页面中的脚本
<script type="text/javascript">
$(function() {
//autocomplete
$("#receiver").autocomplete({
source: "autocomplete.php",
minLength: 1,
select: function(event, ui) {
$("#receiver_id").val(ui.item.value);
}
});
});
</script>
FORM
<form action="action_send_message.php" method="POST" >
<label for="receiver">Receiver</label>
<input type="text" name="receiver" id="receiver" placeholder="Receiver" class="span12" />
<input type="hidden" name="receiver_id" id="receiver_id" value=""/>
<textarea id="messagebody" name="message_body" class="wysihtml5 span12" rows="5" placeholder="Mesajınızı Yazın"></textarea>
<button type="submit" class="btn btn-large color-10">Gönder</button>
</form>
答案 0 :(得分:1)
这是一种更简单的方法
的search.php
while($row = $stmt->fetch()) {
$return_arr[] = array('value' => $row['name'], 'id' => $row['id']);
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
echo json_encode($return_arr);
$(function() {
> //autocomplete
> $("#autocomplete").autocomplete({
> source: "search.php",
> minLength: 1,
> select: function(event, data) {
> $("#hidden").val(data.item.id);
> $("#autocomplete").val(data.item.value);
> },
> });
> });
答案 1 :(得分:0)
问题是你只返回一维数组中的最后一个结果来返回JSON对象。 你的对象看起来像这样:
{
name: "Firstname",
surname: "Surname",
id: "id"
}
而不是结果数组:
{
"0": { name: "Firstname", surname: "Surname", id: "id" },
"1": { name: "Firstname", surname: "Surname", id: "id" },
"2": { name: "Firstname", surname: "Surname", id: "id" },
}
您只看到一个结果而不是几个结果。 jQueryUI默认假设它们都是id-value对的所有数组,所以它假设带有“Firstname”的项目作为ID为“name”的值,依此类推。 你想做的是:
$i = 0;
while($row = $stmt->fetch()) {
$i++
$return_arr[$i]['name'] = $row['name'];
$return_arr[$i]['surname']= $row['surname'];
$return_arr[$i]['id']= $row['id'];
}
而不是您在代码中使用的while循环。 然后,自动完成将隐藏ID,因为默认行为应该这样做(如果我没有记错的话)。
答案 2 :(得分:0)
<强> EDITTED 强>
我建议您将代码更新为以下内容:
<强> autocomplete.php 强>
....
$return_arr[] = array('value' => $row['name'] . ' ' . $row['surname'],
'id' => $row['id']);
....
echo json_encode($return_arr);
我的表单页面中的脚本
$("#receiver").autocomplete({
source: function(request, response) {
jQuery.ajax({
url: 'autocomplete.php',
dataType: 'json',
success: function(data) {
response(data);
}
});
},
minLength: 1,
select: function(event, data) {
$("#receiver_id").val(data.item.id);
}
});
请注意,仅当$return_arr
项上的数组键为'value'
时,自动完成输出才有效。如果这是其他名称,它将无法正常工作。