我有一个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实例一起使用?