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

Bootstrap模态框中jQueryUI Autocomplete无法鼠标选择的问题求助

Bootstrap 5模态框中jQuery UI Autocomplete鼠标点击无效的修复方案

问题说明

在Bootstrap 5模态框的表单内使用jQuery UI Autocomplete组件时,仅支持通过键盘选择下拉选项,鼠标点击选择操作完全失效。

复现代码

HTML代码

<div class="container py-3">
    <button type="button" data-bs-toggle="modal" data-bs-target="#myModal" class="btn btn-primary">Open modal</button>
</div>
<!-- Modal popup -->
<div class="modal" tabindex="-1" id="myModal">
    <div class="modal-dialog">
        <form method="post" action="#" id="acModalForm">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">Edit form</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <div class="modal-body">
                    <h1>Form</h1>
                    <hr>
                    <div class="form-floating">
                        <input type="text" class="form-control" id="acInput" placeholder="Sample autocomplete value" value="">
                        <label for="acInput">Sample autocomplete value</label>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
                    <button type="button" class="btn btn-primary">Save changes</button>
                </div>
            </div>
        </form>
    </div>
</div>

JavaScript代码

$(function () {
    const sampleData = [ "ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure", "COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript", "Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme" ];

    $("#acInput").autocomplete({
        source: sampleData,
        appendTo: "#acModalForm"
    });
});

问题原因

核心原因是Bootstrap 5模态框的事件拦截机制:模态框会捕获并阻止外部元素的鼠标事件冒泡,同时jQuery UI Autocomplete下拉菜单的默认挂载位置与层级设置,导致其无法正确响应鼠标点击;此外模态框的tabindex="-1"属性也会干扰焦点与事件的正常传递。

修复方案

方案一:调整挂载容器与菜单层级

将Autocomplete下拉菜单挂载到模态框内容容器内,并确保其层级高于模态框:

$(function () {
    const sampleData = [ "ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure", "COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript", "Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme" ];

    $("#acInput").autocomplete({
        source: sampleData,
        appendTo: "#myModal .modal-content", // 指定挂载到模态框内容容器
        open: function() {
            // 设置下拉菜单层级高于Bootstrap模态框(默认z-index为1050)
            $(".ui-autocomplete").css("z-index", 1060);
        }
    });
});

方案二:阻止事件冒泡到模态框

通过事件委托,让模态框忽略对Autocomplete下拉菜单的点击拦截:

// 阻止Autocomplete菜单的点击事件冒泡到模态框
$(document).on("mousedown", ".ui-autocomplete", function(e) {
    e.stopPropagation();
});

该方案可与方案一结合使用,进一步提升稳定性。

方案三:关闭模态框自动焦点捕获(不推荐)

此方案会影响模态框的无障碍访问特性,仅在前两种方案无效时使用:

$("#myModal").on("shown.bs.modal", function() {
    $(this).off("focusin.modal");
});

验证效果

应用任意方案后,Autocomplete下拉菜单即可正常响应鼠标点击选择,同时保留原有的键盘操作功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:32:01