Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 引导选择在Laravel livewire渲染后不工作_Javascript_Laravel_Laravel Livewire - Fatal编程技术网

Javascript 引导选择在Laravel livewire渲染后不工作

Javascript 引导选择在Laravel livewire渲染后不工作,javascript,laravel,laravel-livewire,Javascript,Laravel,Laravel Livewire,我有一个元素在第一次渲染时可以很好地工作。它初始化为: $(document).ready(function () { $('select').selectpicker(); }); 但是调用livewire的render函数后,元素不再作为引导选择器呈现 通过查看这两个文档(相关部分和),我认为下面的代码应该可以修复它: <script> document.addEventListener("livewire:load", function(event) {

我有一个元素在第一次渲染时可以很好地工作。它初始化为:

$(document).ready(function () {
    $('select').selectpicker();
});
但是调用livewire的render函数后,
元素不再作为引导选择器呈现

通过查看这两个文档(相关部分和),我认为下面的代码应该可以修复它:

<script>
    document.addEventListener("livewire:load", function(event) {
        window.livewire.hook('afterDomUpdate', () => {
            $('select').selectpicker('refresh');
        });
    });
</script>


在更新后的
中,这两种方法都不起作用。如果我从控制台调用所有这些函数,DOM不会更新
元素,因此实际上这些函数似乎不起作用。

我认为,每次更新DOM时,您都在重新初始化选择器选择器。这就是为什么每当你使用

 $('select').selectpicker('refresh'); 

在livewire钩子中,它基本上刷新dom中新初始化的选择器选择器。我猜是这样的,因为根据你上面的代码和语句,除非在幕后发生了我提到的错误,否则它应该是有效的

我不知道我是否有道理。刷新前,请检查是否正在重新初始化。让我知道

试试看

$('.selectpicker').selectpicker('refresh');

我知道这实际上和你的一样,但在我的例子中,并不是所有的选择都是引导选择,所以只针对.selectpicker类似乎达到了预期的效果。这可能是个骗人的把戏,但对我来说很有效。

如果其他人被困在这里,你可以这样做

<div wire:ignore id="for-bootstrap-select">
     <select class="form-control" data-container="#for-bootstrap-select">
         @foreach($data as $item)
            <option value="{{ $item->id }}">{{ $item->name }}</option>
         @endforeach
     </select>
</div>

@foreach($数据作为$项)
{{$item->name}
@endforeach

原因

只需在html
input/select
标签上添加
wire:ignore

我也有类似的问题,但我的情况是,在这里使用select2插件名称时,会损失数小时,这与使用
'select'
有什么不同?我知道您现在使用的是类而不是元素类型,但是名为
refresh
的函数仍然是一样的?虽然此代码可以解决OP的问题,但最好包含一个关于代码如何解决OP问题的解释。通过这种方式,未来的访问者可以从您的帖子中学习,并将其应用到自己的代码中。因此,它不是一种编码服务,而是一种知识资源。此外,高质量、完整的答案更有可能被提升。这些特性,以及所有帖子都是独立的要求,是SO作为一个平台的一些优势,使其区别于论坛。您可以编辑以添加其他信息和/或使用源文档补充说明。您可以将其放在livewire刀片文件中……但是您是否也需要在app.js中使用jquery并在app.scss中导入css?我用的是mix?是的。因为我的livewire组件扩展了主布局,所有资产(js/css)都在主布局中初始化。我使用的是CDN,而不是本地托管库,但即使您使用的是mix,我也确信它不会影响任何东西。嗨,BezhanSalleh,它根本不会渲染,除非使用类表单控件,但如果我尝试使用select multiple with multiple data actions box=“true”,这就是我想要的,它只会显示一个带有所有选项的open select。你能看看我的问题吗。你好,贾帕,看看。。。我希望它能帮助。。。如果没有,你需要发布实际的代码片段,这样我就可以看一下。。。因为在我的测试中它工作得很好。。。还发布了游乐场的链接,你可以在那里查看。嗨,BenzhanSalleh,首先非常感谢你花时间帮助我,我将检查并测试,我会给出反馈,问候。
$('.selectpicker').selectpicker('refresh');
<div wire:ignore id="for-bootstrap-select">
     <select class="form-control" data-container="#for-bootstrap-select">
         @foreach($data as $item)
            <option value="{{ $item->id }}">{{ $item->name }}</option>
         @endforeach
     </select>
</div>