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

jQuery UI Autocomplete选择后输入框显示HTML代码问题求助

解决jQuery UI Autocomplete选择选项后输入框显示HTML标签的问题

问题核心:你当前的代码将带<span>标签的HTML字符串同时赋值给了label和value字段,选择选项时,Autocomplete默认会把value填充到输入框,导致HTML代码直接显示出来。

解决方案分两步修改:

1. PHP端:分离显示文本和实际值

修改后端返回的JSON数据,将label设为带HTML的显示文本,value设为纯代码文本(不带任何标签):

public function partCodeAutoc(Request $request)
{
    $return_arr3 = [];
    $type = $request->code_type;
    $part_code = $request->term;
    $column2 = "car_code";

    $query = Cars::where($column2, "LIKE", "%" . $part_code . "%")->where('car_status',3)->get();
    if ($query->count() > 0) {
        $uniqueCodes = [];
        foreach ($query as $rows) {
            $code = $rows->$column2;
            // 去重处理,避免重复项
            if (!in_array($code, $uniqueCodes)) {
                $uniqueCodes[] = $code;
                $row_array["label"] = $code.' <span class="badge badge-light-secondary" style="float:right;">Car</span>';
                $row_array["value"] = $code; // 仅存纯代码文本
                array_push($return_arr3, $row_array);
            }
        }
    }
    echo json_encode($return_arr3);
}

2. JS端:控制选择后的输入框值

在select事件中阻止默认行为,手动将纯文本的value填充到输入框,同时保留下拉项的HTML渲染:

$("#part_code").autocomplete({
    source: function (request, response) {
        let code_type = $("#service-chk").is(":checked") ? 1 : 0;
        $.ajax({
            url: "partCodeAutoC",
            type: "POST",
            dataType: "json", 
            data: {
                code_type: code_type,
                term: request.term,
            },
            success: function (data) {
                response(data);
            },
        });
    },
    minLength: 1,
    select: function (event, ui) {
        // 阻止默认行为,避免Autocomplete自动填充label到输入框
        event.preventDefault();
        // 设置输入框为纯代码文本
        $(this).val(ui.item.value);
    },
}).data("ui-autocomplete")._renderItem = function (ul, item) {
    return $("<li>")
        .append("<div>" + item.label + "</div>")
        .appendTo(ul);
};

原理说明

  • 后端分离label和value:label负责下拉列表的带样式显示,value存储实际需要填充到输入框的纯文本。
  • 前端select事件处理:通过event.preventDefault()阻止Autocomplete的默认填充逻辑,手动设置输入框值为纯文本的ui.item.value,既保留了下拉项的样式,又避免了HTML标签显示在输入框中。

内容的提问来源于stack exchange,提问作者MR Lappy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:20:19