如何在Bootstrap前端展示Flask传递的医院列表可选下拉菜单
你当前代码的核心问题是混用了 Bootstrap 的 dropdown 悬浮菜单组件和原生 select 表单选择组件,多余的外层 dropdown 结构导致出现了两层下拉的样式异常。以下是两种可直接使用的修复方案:
方案1:使用原生表单选择框(最常用,适合表单提交场景)
直接保留form-select,删除外层多余的dropdown相关结构即可,修复后代码如下:
<!-- 医院选择下拉菜单 --> <div class="mb-3"> <select class="form-select form-select-lg" name="hospital"> {% if hospitals %} <option value="{{hospitals[0]}}" selected>{{hospitals[0]}}</option> {% for hospital in hospitals[1:] %} <option value="{{hospital}}">{{hospital}}</option> {% endfor %} {% else %} <option value="" disabled selected>暂无可用医院</option> {% endif %} </select> </div>
说明:
method和action属性要写在包裹该选择框的<form>标签上,不要写在<select>标签中- 新增了空列表判断逻辑,避免后端返回空列表时模板渲染报错
方案2:使用按钮触发式悬浮下拉菜单(适合无表单的跳转/筛选场景)
如果需要点击按钮弹出菜单的交互样式,就不需要用<select>标签,直接按Bootstrap dropdown规范编写结构即可:
<!-- 按钮触发式医院选择下拉菜单 --> <div class="dropdown mb-3"> <button class="btn btn-secondary dropdown-toggle" type="button" id="hospitalDropdown" data-bs-toggle="dropdown" aria-expanded="false"> 选择医院 </button> <ul class="dropdown-menu" aria-labelledby="hospitalDropdown"> {% for hospital in hospitals %} <li><button class="dropdown-item" type="button" data-value="{{hospital}}">{{hospital}}</button></li> {% endfor %} </ul> </div>
说明:
- 如果你使用的是Bootstrap 5版本,需要把所有交互属性的前缀从
data-改为data-bs-,否则下拉交互不会生效 - 可以补充简单的JS逻辑实现选中值回显:点击
dropdown-item时,把按钮文本替换为选中的医院名称,同时把选中值存入隐藏域或者直接发起请求
内容的提问来源于stack exchange,提问作者LivingstoneM
相关产品推荐
相关产品推荐

