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

Bootstrap 3模态框内按钮点击事件多次触发的解决办法咨询

Bootstrap 3模态框按钮点击事件多次触发的解决方案

问题描述

在Bootstrap 3(v3.4.1)和jQuery v3.3.1环境下,由另一个模态框打开的嵌套模态框内,btnSendReport按钮每次点击会触发4次点击事件。已确认DOM中仅存在一个该ID的按钮,无页面回发操作,目前仅通过HTML按钮直接调用脚本的方式有效,需其他可行解决方案。

相关代码

HTML代码

<div class="modal-footer">
    <span id="spanSendReport">
        <button type="button" id="btnSendReport" class="btn btn-success" data-dismiss="modal">Send Report</button>
    </span>
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>

jQuery点击事件代码

$("#btnSendReport").click(function (e) {
    var parElem = $(this).parent().parent().parent();
    var listID = parElem.find("#hidLID").val();
    var problemTypes = $.map(parElem.find('option:selected'), function (e) { return e.value; }).join(',');
    var problemTypeOther = parElem.find("#txtProblemTypeOther").val();

    var obj = {};
    obj.lid = listID;
    obj.ProblemTypes = problemTypes;
    obj.ProblemTypeOther = problemTypeOther;

    try {
        $.ajax({
            type: "POST",
            url: "../../api/reportdiscrepancy/",
            data: obj,
            dataType: "json",
            success: function (data) {
                var result = data;
            },
            error: function (err) {
                console.log(err);
            }
        });
    } catch (err) {
        console.log(err);
    }
});

解决方案

1. 先解绑再绑定事件

每次绑定前移除已存在的点击事件,避免重复绑定:

$("#btnSendReport").off('click').click(function (e) {
    // 原有业务代码
});

2. 使用事件委托绑定到静态父元素

将事件绑定到页面加载时就存在的静态元素(如document或外层容器),利用事件委托机制,避免动态生成的模态框重复绑定事件:

$(document).on('click', '#btnSendReport', function (e) {
    // 原有业务代码
});

3. 阻止事件冒泡

嵌套模态框可能导致事件向上冒泡,触发上层元素的绑定事件,添加stopPropagation()阻止冒泡:

$("#btnSendReport").click(function (e) {
    e.stopPropagation(); // 阻止事件冒泡
    // 原有业务代码
});

4. 优化模态框初始化逻辑

避免每次打开模态框都动态生成DOM元素,复用同一个模态框实例,仅控制其显示/隐藏状态,从根源上减少重复绑定的可能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:57:21