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

Laravel 7中Bootstrap Datepicker报错:$(...).datepicker不是函数

解决Laravel 7中Bootstrap Datepicker的"$(...).datepicker is not a function"错误

这个问题我之前也踩过坑,核心原因其实是重复加载jQuery+脚本执行顺序不对,还有个容易忽略的小细节——组件初始化方法搞错了,咱们一步步来搞定:

1. 先删掉重复的jQuery引入

Laravel默认的app.js已经内置了jQuery(毕竟Bootstrap依赖它),你在视图里又额外引入了一次<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>,这会导致两个版本的jQuery冲突:后加载的会覆盖前一个,而datepicker是绑定到被覆盖的那个jQuery实例上的,自然就找不到方法了。

所以第一步,把视图里这行重复的jQuery引入直接删掉。

2. 调整脚本加载顺序,处理defer的影响

你的app.js加了defer属性,意味着它会等整个DOM解析完成后才执行。但你原来的内联脚本是直接写在视图里的,会比app.js先跑,这时候jQuery还没加载,肯定会报错。

有两种解决思路:

方法一:把依赖脚本移到布局底部

修改你的布局文件,把datepicker的CSS留在头部,然后把moment和datetimepicker的脚本放到</body>标签前,并且放在app.js之后:

修改后的布局关键部分:

<head>
    <!-- 原有头部内容不变 -->
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
    <!-- datepicker的CSS保留在头部 -->
    <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.css" rel="stylesheet">
</head>
<body>
    <!-- 页面内容区域 -->

    <!-- 把脚本移到body底部,保证加载顺序 -->
    <script src="{{ asset('js/app.js') }}" defer></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>
</body>

方法二:用DOM加载事件包裹初始化代码

如果不想动布局结构,就在你的内联脚本外面套一层DOM加载完成的监听,确保jQuery和datepicker脚本都加载完毕再执行初始化:

document.addEventListener('DOMContentLoaded', function() {
    $('#datepicker').datetimepicker({
        format: 'MM/DD/YYYY' // 注意格式要匹配bootstrap-datetimepicker的规则
    });
});

3. 修正组件初始化方法的小错误

你用的是bootstrap-datetimepicker,它的初始化方法是datetimepicker(),而不是jQuery UI的datepicker()!这是很容易混淆的点,把$( "#datepicker" ).datepicker({...})改成$( "#datepicker" ).datetimepicker({...})就对了。

最终修改后的视图文件

@extends('layouts.app')
@section('content')
<form action="/tour/{id}" method="post">
    <!-- CROSS Site Request Forgery Protection -->
    @csrf
    <div class="form-group">
        <label>Date</label><br>
        <input id="datepicker" type="text" />
    </div>
</form>

<script>
document.addEventListener('DOMContentLoaded', function() {
    $('#datepicker').datetimepicker({
        format: 'MM/DD/YYYY'
    });
});
</script>
@endsection

按照上面的步骤改完,应该就能正常加载datepicker了。如果还有问题,可以打开浏览器开发者工具(F12),在控制台输入jQuery看看能不能正常输出,再检查bootstrap-datetimepicker是否加载成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:02:45