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

Laravel:使用局部视图/模态框时避免重复脚本标签

解决Laravel局部视图重复加载mask.js的几种方案

方案1:用Blade的@once指令(最简单高效)

Blade自带的@once指令能保证包裹的内容在整个视图渲染周期内只执行一次,刚好适配你的场景。直接在局部视图的脚本区块里这么写:

@section('scripts')
    @parent
    @once
        <script src="/path/to/jquery.mask.min.js"></script>
        <!-- 这里可添加当前表单的mask初始化逻辑 -->
        <script>
            $(function() {
                $('.your-mask-input').mask('0000-0000');
            });
        </script>
    @endonce
@endsection

不管你在同一个视图里引入多少次这个局部视图,@once内部的脚本只会输出一次,且在第一次引入时加载,完美满足「按需加载+不重复」的要求。

方案2:前端层面判断脚本是否已加载

如果不想依赖Blade指令,也可以用JS自身判断插件是否存在,避免重复请求:

@section('scripts')
    @parent
    <script>
        // 检查mask插件是否已挂载到jQuery
        if (typeof $.fn.mask === 'undefined') {
            var script = document.createElement('script');
            script.src = '/path/to/jquery.mask.min.js';
            script.onload = function() {
                // 脚本加载完成后初始化当前表单的mask
                $('.your-mask-input').mask('0000-0000');
            };
            document.head.appendChild(script);
        } else {
            // 插件已加载,直接初始化当前表单
            $('.your-mask-input').mask('0000-0000');
        }
    </script>
@endsection

这种方式从前端层面做校验,不管后端渲染多少次局部视图,JS都会自动跳过重复加载的逻辑。

方案3:用视图共享变量做后端标记

你也可以通过Laravel的视图共享功能,在全局维护一个「是否已加载mask.js」的状态标记:

  1. 先在AppServiceProvider的boot方法里共享初始变量:
public function boot()
{
    view()->share('loadedMaskJs', false);
}
  1. 然后在局部视图里做判断输出:
@section('scripts')
    @parent
    @unless($loadedMaskJs)
        <script src="/path/to/jquery.mask.min.js"></script>
        <?php $__env->share('loadedMaskJs', true); ?>
    @endunless
    <script>
        $(function() {
            $('.your-mask-input').mask('0000-0000');
        });
    </script>
@endsection

第一次加载局部视图时,会输出脚本并把标记设为true,后续再引入该视图时就不会重复输出脚本了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:25:23