laravel - 使用 alpine js 在选择更改时初始化 select2
问题描述
我有一个带有选择的表格,并且在更改(选择某个选项时),我希望其他选择变得可见。第二个选择使用 select2。为此,我使用 Alpine JS(在 Laravel 中)。
问题是第二个选择在页面加载时不可见,并且在文档就绪时初始化 select2 的查询代码未加载。
当我在第一个选择中选择特定值时,第二个选择显示,但它的宽度很小。
如何动态初始化 select2?
<div x-data="{vervoerswijze:1}">
<div class="mt-4">
<select x-model='vervoerswijze' class="text-gray-500 form-select block w-full mt-1 shadow-sm rounded-md border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50">
<option>Kies een optie</option>
<option value="1">Winkel</option>
<option value="2">Met gebruiker(s)</option>
</select>
</div>
<div x-show="vervoerswijze == 2" class="mt-4 w-full" wire:ignore>
<x-jet-label class="text-gray-500 font-normal text-base mb-4" for="Gebruikers" value="{{ __('Selecteer gebruikers') }}" />
<select wire:model="gebruikerinwagen" class="select2 text-gray-500 form-select block w-full mt-1 shadow-sm rounded-md border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50" multiple="multiple">
@foreach ($gebruikers as $gebruiker)
<option value="{{ $gebruiker->id }}">{{ $gebruiker->first }} {{ $gebruiker->last }}</option>
@endforeach
</select>
</div>
</div>
<script>
$(function(){
$('.select2').select2().on('change', function(){
@this.set('gebruikerinwagen', $(this).val());
});
})
</script>
解决方案
您也许可以执行以下操作
<template x-if="vervoerswijze == 2">
<div class="mt-4 w-full" wire:ignore>
<x-jet-label class="text-gray-500 font-normal text-base mb-4" for="Gebruikers" value="{{ __('Selecteer gebruikers') }}" />
<select x-data="initSelect2($el)" wire:model="gebruikerinwagen" class="select2 text-gray-500 form-select block w-full mt-1 shadow-sm rounded-md border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50" multiple="multiple">
@foreach ($gebruikers as $gebruiker)
<option value="{{ $gebruiker->id }}">{{ $gebruiker->first }} {{ $gebruiker->last }}</option>
@endforeach
</select>
</div>
</template>
<script>
function initSelect2(element) {
$($element).select2().on('change', function(){
@this.set('gebruikerinwagen', $(this).val());
});
}
</script>
主要变化是:
select
在页面上呈现相关内容时初始化 Select2 (使用 Alpine.js x-data)- 使用 an
x-if
(而不是x-show
),以便select
仅在必要时呈现(因此 select2 仅在必要时被初始化)
推荐阅读
- python - Gensim槌虫?多次加载保存的模型失败
- mysql - 如何从我的 sql 中的嵌套 json 结构中提取值?
- ceph - Ceph MDS 不断崩溃:ceph_assert fail ... prepare_new_inode
- azure - 如何知道 azure app 服务(应用程序)和 azure 数据库服务之间使用了哪些内部网络服务?
- haskell - Haskell 类型检查和确定性
- javascript - 我如何在客户端写一个承诺
- javascript - 当浏览器失去互联网连接时,Websocket 连接关闭
- javascript - 选定的下拉值未显示在 React 的按钮中
- php - 我想使用 PHP 将我的产品加载为网格
- javascript - 在 IE 中运行 Angular 5 应用程序而不使用“import 'core-js/es6/reflect' 和 import 'core-js/es7/reflect'”