Laravel jQuery加载两次

时间:2018-11-04 16:27:50

标签: laravel jquery-select2

我有一个Laravel Web应用程序。我通过Javascript文件添加功能。更具体地说,我希望某些文本字段呈现为Select2输入字段。

在app.blade.php中,我具有以下内容:

<!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script>
@yield('scripts');

在create.blade.php中,我引用了select2 js文件和一些自定义js代码。

@section('scripts')

<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>

<script>
   $(document).ready(function() {
      $('.js-example-basic-multiple').select2();
   });
</script>

@endsection('scripts')

这将导致

>     select2.min.js:1 Uncaught ReferenceError: jQuery is not defined
>     create:174 Uncaught ReferenceError: $ is not defined

我确定jQuery会按照bootstrap.js文件中的定义进行加载,如下所示(并且可用于其他功能,如Dropbox):

try {
    //window.$ = window.jQuery = require("jquery/dist/jquery.slim");
    window.$ = window.jQuery = require("jquery");
    require("bootstrap");
} catch (e) {}

当我删除app.blade.php中的app.js引用(因此未加载该jQuery实例)并且我在create.blade.php中手动添加jQuery(因此仅加载了一个jQuery实例)时,一切作品。见下文:

app.blade.php

<!-- Scripts -->
@yield('scripts');

create.blade.php

@section('scripts')
    <script
        src="https://code.jquery.com/jquery-3.3.1.js"
        integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
        crossorigin="anonymous">
    </script>


    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $('.js-example-basic-multiple').select2();
        });
    </script>

        <script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.4.0/dropzone.js"></script>
    <script src="{{ asset('js/dropzone.js') }}" defer></script>

@endsection

如果我这样做,则输入字段将呈现为我想要的标签。但是,这导致无法从Laravel应用注销(因为已删除了app.js)。

如何确保select2与app.js文件的jquery实例一起使用?

0 个答案:

没有答案