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

如何在Twig的if语句中加载JS脚本触发的提示框

解决方法:基于Twig条件触发JS提示框

Got it, let's fix this properly. The core goal here is to trigger that $.confirm prompt only when the Twig condition is met, without relying on hacky frame/div onload events which can cause timing issues.

方案1:直接在Twig中条件渲染完整JS逻辑

这是最直观可靠的方式——让Twig判断权限,符合条件时直接输出执行提示框的代码块:

{% if user_perm.up_slug != 'view_hospitals' %}
<script>
// 确保页面依赖(jQuery + $.confirm)都加载完成后再执行
$(document).ready(function() {
    errorLoad();
});

// 定义你的提示框函数
function errorLoad() {
    $.confirm({
        title: '权限不足',
        content: '你没有查看医院列表的权限,请联系系统管理员申请权限',
        buttons: {
            confirm: {
                text: '我知道了',
                action: function() {
                    // 点击确认后的操作,比如返回上一页
                    window.history.back();
                }
            }
        }
    });
}
</script>
{% endif %}

方案2:如果errorLoad已经在外部JS文件中定义

如果你的errorLoad函数已经写在单独的JS文件里(比如app.js),只需要在Twig条件中触发调用即可,避免重复代码:

{% if user_perm.up_slug != 'view_hospitals' %}
<script>
$(document).ready(function() {
    // 先检查函数是否存在,避免报错
    if (typeof errorLoad === 'function') {
        errorLoad();
    }
});
</script>
{% endif %}

为什么之前的frame/div onload方式不好用?

用额外元素的onload事件触发容易踩坑:

  • 元素的onload可能在jQuery或$.confirm还没加载完成时就触发,导致$或$.confirm未定义的错误
  • 额外添加不必要的DOM元素,增加页面冗余

关键注意事项

  • 确保jQuery和$.confirm的脚本在这段代码之前加载(比如放在<body>末尾,或者给依赖脚本加defer属性)
  • 如果是动态加载内容的场景(比如AJAX渲染),可以把触发逻辑放在内容渲染完成的回调里,而不是document.ready

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:58:11