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

如何通过Bootstrap3-Dialog模态框设置变量?

解决BootstrapDialog按钮无法正确设置变量并同步获取值的问题

问题原因

你的代码里console.log(error)会在模态框弹出之前就执行——BootstrapDialog的弹窗是异步触发的,不会阻塞后续代码执行。此时用户还没点击任何按钮,error自然还是初始的false。虽然按钮的action函数确实会修改error,但这个修改发生在日志输出之后,所以你看到的始终是初始值。

解决方案

方法1:使用回调函数处理后续逻辑

把依赖error的逻辑(比如console.log)封装成回调函数,在按钮点击关闭弹窗后调用:

let error = false;  

if (error === false) {             
  BootstrapDialog.show({                 
    title: 'Attention',                 
    message: `There was an error`,                 
    buttons: [
      {
        label: 'Close', 
        action: function (dialogItself) { 
          error = true; 
          dialogItself.close();
          handleDialogResult(); // 触发后续逻辑
        }
      },
      {
        label: 'Keep going', 
        cssClass: 'btn-success', 
        action: function (dialogItself) { 
          error = false; 
          dialogItself.close();
          handleDialogResult(); // 触发后续逻辑
        }
      }
    ]             
  });
} 

// 处理弹窗关闭后的逻辑
function handleDialogResult() {
  console.log(error); // 这里能拿到按钮设置后的正确值
}

方法2:用Promise+async/await简化异步逻辑

把弹窗逻辑封装成Promise,通过await等待用户操作结果,让代码逻辑更线性:

// 封装弹窗为Promise
function showErrorDialog() {
  return new Promise((resolve) => {
    BootstrapDialog.show({                 
      title: 'Attention',                 
      message: `There was an error`,                 
      buttons: [
        {
          label: 'Close', 
          action: function (dialogItself) { 
            dialogItself.close();
            resolve(true); // 点击Close,返回true作为error新值
          }
        },
        {
          label: 'Keep going', 
          cssClass: 'btn-success', 
          action: function (dialogItself) { 
            dialogItself.close();
            resolve(false); // 点击Keep going,返回false作为error新值
          }
        }
      ]             
    });
  });
}

// 用async函数执行逻辑
async function init() {
  let error = false;  
  if (error === false) {             
    error = await showErrorDialog(); // 等待用户点击按钮,获取结果
    console.log(error); // 这里能得到正确的error值
  }
}

// 启动逻辑
init();

补充说明

如果你在原来的代码里,点击按钮后手动在浏览器控制台输入error,会发现它已经被按钮修改了——只是console.log执行得太早,没捕捉到修改后的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:24:51