javascript - jQuery UI 自动完成显示 AJAX 源的标签和值

标签 javascript jquery ajax jquery-ui jquery-ui-autocomplete

我有带有 AJAX 源的 jQuery UI 自动完成输入,我想在其中显示标签而不是 ID;但是当搜索结果返回时,我的代码会显示两者。我怎样才能只显示标签?

PHP:

<?php
require_once '../php/db_conx.php';
$req = "SELECT * 
        FROM ads 
        WHERE bbookname LIKE '%" . strtolower(mysql_real_escape_string($_REQUEST['term'])) . "%' ";
$query = mysql_query($req);
while ($row = mysql_fetch_array($query)) {
    $return = array(
        'label' => $row['bbookname'] . ' ' . $row['bbookschool'],
        'value' => $row['adid']
    );
}
echo json_encode($return);
?>

jQuery/AJAX:

$("#BooksSearchInput").autocomplete({
    source: '../Search/BP_Books_Search.php',
    minLength: 1,
    autoFocus: false,
    select: function(event, ui) {
        var SearchBookVal = (ui.item.value)
        $.ajax({
            type: "POST",
            data: {
                data: SearchBookVal
            },
            url: "../php/SearchBooks_results.php"
        }).done(function(feedback) {
            $('#booksads').html(feedback)
        });
    }
});

请注意,我确实需要 adid 在 JavaScript 回调中可用,因为我使用它来引用结果。

最佳答案

您的代码中有几处错误。

首先,PHP 脚本中的以下行:

$return = array(...)

表示返回变量将在每次迭代时被覆盖,结果将始终是一个包含一项的数组(或者如果未找到匹配的行,则为 PHP 警告和字符串 null)。修复:

$return = array();
while ($row = mysql_fetch_array($query)) {
    $return[] = array(
        "label" => $row["bbookname"] . " " . $row["bbookschool"],
        "value" => $row["adid"],
        // you can add additional keys without causing problems
        "feedback" => $row["feedback"]
    );
}
echo json_encode($return);

其次,要在文本框中显示标签,您可以使用来自 this answeronFocusonSelect 代码:

// ...
focus: function (event, ui) {
    event.preventDefault();
    $(this).val(ui.item.label);
},
select: function (event, ui) {
    event.preventDefault();
    $(this).val(ui.item.label);
    $("#booksads").html(ui.item.feedback);
}
// ...

关于javascript - jQuery UI 自动完成显示 AJAX 源的标签和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20587763/

相关文章:

javascript - jQuery 点击触发两次

javascript - 如何使包含六张不同图片的 div 在单击时向外展开?

javascript - 为什么当我在单独的函数中使用 $(this) 并在 .each() 中调用它时它不起作用?

javascript - Django AJAX 防止模板之间重新加载元素

javascript - 如何将传递给 Nodejs 的查询字符串转发到通过 res.render 提供服务的页面?

javascript - 未定义的 JS 密码生成器

javascript - jQuery Slidetoggle - 仅在一个框上显示/隐藏子菜单

javascript - 如何将数组数据模型中的交替元素放入基于列的布局中?

jquery - 始终在 mcustomscrollbar 插件中显示滚动条

php - 我如何获取post变量的值,通过ajax在php中发送