代码之家  ›  专栏  ›  技术社区  ›  Ryuujo dhara gosai

未捕获引用错误:$未在DataTable上定义

  •  0
  • Ryuujo dhara gosai  · 技术社区  · 6 年前

    所以我在控制台上发现一个错误,上面写着

    Uncaught ReferenceError: $ is not defined
        at 2e9ecdab-e88c-11e8-95f0-02fba84c29d0:1934
    

    当我深入研究代码时,问题就出在这段代码中:

    $('#cashFlow').DataTable({ //ReferenceError: $ is not defined 
    dom: 'Bfrtip',
    buttons: [
      {
        extend: 'excel',
        text: 'Export to Excel',
        className: 'btn btn-default',
        exportOptions: {
          columns: 'th:not(:last-child)'
        }
      }],
    'paging'      : true,
    'searching'   : true,
    'ordering'    : true,
    "columns" : [
      {"width" : "5%"},
      {"width" : "10%"},
      {"width" : "25%"},
      {"width" : "5%"},
      {"width" : "15%"},
      {"width" : "3%"},
      {"width" : "15%"},
      {"width" : "2%"}
    ]});
    

    $('#cashFlow') 表已存在,并且已位于此代码的顶部。

    <table id="cashFlow" class="table table-striped table-bordered">
    <thead>
    <tr>
      // ...
      <th>{{__('grabLog.action')}}</th>
    </tr>
    </thead>
    @if(isset($cashflow))
      @foreach($cashflow as $index=>$f)
        <tr>
          // ...
          <td>
            <button class="btn btn-danger btn-cf-delete" bank_account_id="{{$f->bank_account_id}}"
                    trans_date="{{$f->trans_date}}"
                    description="{{$f->description}}" cab="{{$f->cab}}" amount="{{$f->amount}}"
                    type="{{$f->type}}" balance="{{$f->balance}}" skey="{{$skey}}"><i class="fa fa-trash"></i>
            </button>
          </td>
        </tr>
      @endforeach
    @endif
    

    我已经在这个论坛上搜索了这个问题,所有的答案我都应该放进去 jquery.min.js

    <script src="{{asset('AdminLte/js')}}/jquery/dist/jquery.min.js"></script>
    <script src="{{asset('AdminLte/js')}}/jquery/jquery-3.3.1.js"></script>
    <script src="{{asset('AdminLte/js')}}/bootstrap/bootstrap.min.js"></script>
    <script src="{{asset('AdminLte/js')}}/datatables.net/jquery.dataTables.min.js"></script>
    <script src="{{asset('AdminLte/js')}}/datatables.net-bs/dataTables.bootstrap.min.js"></script>
    <script src="{{asset('AdminLte/js')}}/datatables.net/dataTables.buttons.min.js"></script>
    <script src="{{asset('AdminLte/js')}}/datatables.net/buttons.flash.min.js"></script>
    <script src="{{asset('AdminLte/js')}}/ajax/jszip.min.js"></script>
    <script src="{{asset('AdminLte/js')}}/ajax/pdfmake.min.js"></script>
    <script src="{{asset('AdminLte/js')}}/ajax/vfs_fonts.js"></script>
    <script src="{{asset('AdminLte/js')}}/datatables.net/buttons.html5.min.js"></script>
    <script src="{{asset('AdminLte/js')}}/datatables.net/buttons.print.min.js"></script>
    <script src="{{asset('AdminLte/js')}}/jquery-slimscroll/jquery.slimscroll.min.js"></script>
    //there's another javascripts I put in here but didn't show to you because it doesn't related with this question.
    <script>
      $.ajaxSetup({
        headers: {
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
      });
    </script>
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   gavgrif    6 年前

    您需要在页面底部加载脚本,以防止阻止HTML的加载/呈现。

    请注意,头中应该包含的唯一js函数是呈现内容直接需要的函数,例如对数据源API的调用。所有页面内功能都应在页面HTML/CSS之后加载。

    然后将jquery函数包装到 $(document).ready({})

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
      <link rel="shortcut icon" href="favicon.ico">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="stylesheet" href="/css/bootstrap.min.css">
      <link rel="stylesheet" href="/css/font-awesome.min.css">
    </head>
    
    <body>
      <script src="/js/jquery.min.js"></script>
      <script src="/js/bootstrap.min.js"></script>
      <script>
    
      $(document).ready(function(){
      .... put code here ...
      })
     </script>
    </body>
    </html>