如何将JS函数与带文本输入框的Bootstrap模态框绑定?
问题原因&修复方案
核心错误点
- 模态框元素缺失Bootstrap要求的原生
modal类:Bootstrap的模态框必须带有modal类才会被内置样式默认隐藏,同时才能被内置的data属性API识别,你只写了自定义的modal-report类,所以样式和触发逻辑都失效。 - 绑定对象错误:第一次尝试时你把
id="exampleModal"写在了按钮外层的btn-group容器上,而不是模态框元素上,data-target指向的ID对应的元素不是模态框,自然无法触发。 - 冗余属性干扰:触发按钮上加的
target="_blank"是链接跳转专用属性,放在按钮上没有意义,可能造成异常行为。
修复方案1:原生data属性方案(无需额外写JS)
这是Bootstrap官方推荐的最简方案,修复后的代码如下:
按钮部分
<div class="btn-group" role="group"> <button id="myBtnToCcenter" type="button" target="_blank" class="btn btn-primary"> Open CCenter </button> <button id="myBtnToReportABug" type="button" class="btn btn-secondary" data-toggle="modal" data-target="#reportBugModal"> Report A Problem </button> </div>
模态框部分
<!-- 必须加原生modal类,同时保留自定义类、添加ID方便绑定 --> <div id="reportBugModal" class="modal modal-report" tabindex="-1" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">请简要描述你遇到的问题</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <div class="input-group"> <textarea class="form-control" aria-label="问题描述输入框"></textarea> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary">提交反馈</button> <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button> </div> </div> </div> </div>
修复方案2:JS手动触发方案
如果需要和项目现有openModalPopup逻辑对齐,也可以用JS手动调用Bootstrap模态框API:
// 移除按钮上的data-toggle、data-target属性后添加这段JS即可 $("#myBtnToReportABug").click(() => { $('#reportBugModal').modal('show'); })
注意事项
确保页面已经提前引入了jQuery、Bootstrap CSS、Bootstrap JS三个必要依赖,Bootstrap 3/4的模态框功能完全依赖jQuery运行。
内容的提问来源于stack exchange,提问作者user16741832
相关产品推荐
相关产品推荐

