【问题标题】:jQuery UI autocomplete gets has suggestions but doesn't display themjQuery UI 自动完成获取有建议但不显示它们
【发布时间】:2012-09-23 09:05:50
【问题描述】:

我的页面中有一个 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 工具箱,没有标签组件,但删除它没有任何区别。

提前致谢,

布雷顿

【问题讨论】:

    标签: php jquery-ui autocomplete


    【解决方案1】:

    根据 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
    }
    

    【讨论】:

    • 谢谢。它给了我 2 行 'txt_CLIENTNAME',但将值作为正确的值放入,因此将标签更改为等于名称、公司和电子邮件的组合,作为来自(稍微修改的)查询结果的字符串和这一切都按预期工作。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 2011-03-14
    • 2012-06-09
    • 2015-08-09
    相关资源
    最近更新 更多