1

我的页面中有一个 jQuery 自动完成脚本,如果我在它工作的字段中键入,并且在 3 个字符后按照要求,包含预期数量的建议的下拉菜单会弹出......有点......因为没有下拉菜单中的文本。

如果我将鼠标悬停在下拉菜单上,就好像我正在选择其中一个建议一样,一个窄条会为建议所在的每一行显示一个突出显示,但选择其中一个空突出显示会清空该字段。这并不奇怪。我不太了解返回数据的处理。我在这些论坛的其他帖子中的自动完成示例中看到了非常简单和复杂的代码,但是使用我认为我理解的那些通常会破坏它到我根本没有得到下拉菜单的地步。因此,我毫不掩饰地寻找有人为我提供有效的代码,以便我可以将其分开并弄清楚它是如何工作的。

我的基本 JS 代码是:

    $("#tf_txt_CLIENTNAME").autocomplete({
        source: "search.php",
        minLength: 3,//search after three characters
        dataType: 'json',
        select: function(event,ui){

            //do domething

        }

这是我做不到的地方。正如我所说,我在该空间中尝试了太多代码变体,无法在此提及,所有这些都完全破坏了它。

search.php 为“bra”的输入生成以下 JSON 输出:

[{"txt_CLIENTNAME":"Braedon"},{"txt_CLIENTNAME":"Bradly"}]

来自以下 PHP 源(从另一个 Web 源借用和修改):

<?php
require_once 'includes/dbiconnect.php';
require_once 'includes/sqlfunctions.php';

$term = trim(strip_tags(addslashes($_GET['term']))); //retrieve the search term that autocomplete sends

$qstring = "SELECT `txt_CLIENTNAME` FROM `tbl_client_details` WHERE `txt_CLIENTNAME` LIKE '%".$term."%'";
$result = mysqli_query($db_link,$qstring); //query the database for entries containing the term

while ($row = mysqli_fetch_assoc($result)) {//loop through the retrieved values
        $row['txt_CLIENTNAME']=htmlentities(stripslashes($row['txt_CLIENTNAME']));
        $row_set[] = $row; //build an array
}
echo json_encode($row_set); //format the array into json data
?>

我只是希望它显示它找到的内容并将我选择的内容插入文本字段的值中。然后,我可以使用由该字段的onchange事件触发的 $.POST 更新我想要填充的其他字段(公司、电话号码和电子邮件)(我确信有更好的方法来做到这一点,但我了解如何暂时这样做)。

我正在使用 jQuery 1.7.2 和 jQuery UI 1.8.22。我也加载了最新的 jquery 工具箱,但没有选项卡组件,但删除它并没有什么区别。

提前致谢,

布雷登

4

1 回答 1

2

根据 Jquery UI 指南,

您的 JSON 需要包含标签或值(或两者)

你需要改变你的json如下

while ($row = mysqli_fetch_assoc($result)) {//loop through the retrieved values
        $row['txt_CLIENTNAME']=htmlentities(stripslashes($row['txt_CLIENTNAME']));
        $row_set[] = array('label'=>'txt_CLIENTNAME','value'=>$row['txt_CLIENTNAME']); //build an array
}
于 2012-10-02T13:59:01.180 回答