You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bootstrap Typeahead自动补双全引号及ID赋值问题求助

Bootstrap Typeahead自动补全:解决双引号显示与隐藏域赋值问题

我来帮你搞定这两个问题,先拆解下代码里的问题根源,再给出针对性的修正方案:

问题根源分析

  1. 双引号问题:你在JS的map函数里把item.label转成了JSON字符串(JSON.stringify(someItem.myname)),这完全是多余操作,直接导致显示的文本自带双引号。
  2. 隐藏域赋值失败:你传给process的是转义后的label字符串,不是包含value(IdBio)的完整对象,所以updater里根本拿不到Id值。

另外你的PHP代码还有两处小问题:语法错误(NameBiodatafrom少了空格、where NoUrut NameBiodata多了无效字段),还有严重的SQL注入风险,我也一起帮你修正了。

修正后的代码

1. PHP代码(修复语法+防SQL注入)

<?php
include "database.php";
$query = $_REQUEST['query'] ?? '';

// 使用预处理语句避免SQL注入风险
$stmt = mysqli_prepare($con, "SELECT COUNT(*) as total FROM biodata WHERE NameBiodata LIKE ?");
$likeQuery = "%{$query}%";
mysqli_stmt_bind_param($stmt, "s", $likeQuery);
mysqli_stmt_execute($stmt);
$result = mysqli_fetch_object(mysqli_stmt_get_result($stmt));

if ($result->total > 0) {
    $stmt = mysqli_prepare($con, "SELECT IdBio, NameBiodata FROM biodata WHERE NameBiodata LIKE ?");
    mysqli_stmt_bind_param($stmt, "s", $likeQuery);
    mysqli_stmt_execute($stmt);
    $data_tsk = mysqli_stmt_get_result($stmt);
    
    $data = array();
    while($tsk = mysqli_fetch_object($data_tsk)){
        array_push($data, array('label' => $tsk->NameBiodata, 'value' => $tsk->IdBio));
    }
    echo json_encode($data);
}
?>

2. JavaScript代码(修复双引号+隐藏域赋值)

$('#name_biodata').typeahead({
    source: function (query, process) {
        $.ajax({
            url: 'ajax/auto_complete_biodata.php',
            type: 'POST',
            dataType: 'JSON',
            data: 'query=' + query, // 直接用回调传入的query,更准确
            success: function(data) {
                // 直接把完整的对象数组传给process,无需转成字符串
                process(data);
            }
        });
    },
    minLength: 1,
    // 指定下拉列表显示的文本为label字段
    displayText: function(item) {
        return item.label;
    },
    updater: function(item) {
        // 现在item是完整的对象,直接取value赋值给隐藏域
        $("#IdBio").val(item.value);
        // 返回label作为输入框最终显示的内容
        return item.label;
    }
});

解决逻辑说明

  • 双引号消失:不再对label做JSON转义,直接传递原始对象,通过displayText指定显示内容,下拉列表和输入框里的文本都是正常的原始内容,没有多余双引号。
  • 隐藏域成功赋值:updater函数现在接收的是包含label和value的完整对象,直接通过item.value就能获取IdBio,赋值给隐藏域自然没问题。

内容的提问来源于stack exchange,提问作者Maestro Vladimir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:36:48