Laravel Livewire和Bootstrap表单的重新加载问题

问题描述

当我使用任何Java脚本形式时,我会遇到Livewire问题。使用以下形式:https://bbbootstrap.com/snippets/multi-step-form-wizard-30467045(尽管我尝试了其他形式,但由于电汇而发生在我身上的一切:来自livewire的模型事件)

问题在于WIRE:MODEL将我带到了第一部分,我无法使用WIRE:IGnorE,因为它会覆盖与SELECT相关的行为。

在第二部分中,我使用以下相关形式:

<div class="form-group">
  <label for="provincia">Provincia</label>
  <select wire:model="ubicacionSeleccionada" class="form-control" id="ubicacion">
       <option value=''>Seleccionar provincia</option>
       @foreach($ubicaciones as $ubicacion)
       <option value="{{$ubicacion->id}}">{{ $ubicacion->ubicacion }}</option>
       @endforeach                                          
  </select>
  </div>
                                        
    
   <div class="form-group">
   <label for="tipopropiedad">Localidad</label>
   <select wire:model="area" class="form-control" id="localidad
         {{ count($this->areas)== 0 ? 'hidden' : '' }} ">
         <option value=''>Seleccionar localidad</option>
         @foreach($this->areas as $area)
         <option value={{ $area->id }}>{{ $area->name }}</option>
         @endforeach
   </select>
   </div>

这不允许我使用WIRE:IGnorE中止事件。

问题在于,任何WIRE:MODEL都会生成一个事件,并将该事件的形式带到第一部分。好像是刷新

有人知道我如何在不带来麻烦的情况下使用livewire吗?

EDITION

按钮下一步视图

<input type="button" name="next" class="next action-button" value="Continue" />

JAVASCRIPT

<script>
$(document).ready(function() {

    var current_fs,next_fs,prevIoUs_fs; //fieldsets
    var opacity;

    $(".next ").click(function() {

        current_fs = $(this).parent();
        next_fs = $(this).parent().next();

        //Add Class Active
        $(".progressbar li ").eq($("fieldset ").index(next_fs)).addClass("active ");

        //show the next fieldset
        next_fs.show();
        //hide the current fieldset with style
        current_fs.animate({
            opacity: 0
        },{
            step: function(Now) {
                // for making fielset appear animation
                opacity = 1 - Now;

                current_fs.css({
                    'display': 'none','position': 'relative'
                });
                next_fs.css({
                    'opacity': opacity
                });
            },duration: 600
        });
    });

    $(".prevIoUs ").click(function() {

        current_fs = $(this).parent();
        prevIoUs_fs = $(this).parent().prev();

        //Remove class active
        $(".progressbar li ").eq($("fieldset ").index(current_fs)).removeClass("active ");

        //show the prevIoUs fieldset
        prevIoUs_fs.show();

        //hide the current fieldset with style
        current_fs.animate({
            opacity: 0
        },'position': 'relative'
                });
                prevIoUs_fs.css({
                    'opacity': opacity
                });
            },duration: 600
        });
    });

    $('.radio-group .radio').click(function() {
        $(this).parent().find('.radio').removeClass('selected');
        $(this).addClass('selected');
    });

    $(".submit ").click(function() {
        return false;
    })

});

解决方法

当您更改表单中的数据时,Livewire将重新加载组件。您的Livewire组件包含整个表单,因此由于状态丢失,您javascript所做的任何更改都将被忘记。

使用Livewire属性(例如 selectedSection ),而不是使用提供的JavaScript进行页面更改,并使用它来确定要显示的表单部分。这将允许您在Livewire更新时维护表单的状态。单击页面按钮时,还可以使用Livewire方法更新 selectedSection 的值。

,

您可以使用wire:model.lazy

  <div class="form-group">
  <label for="provincia">Provincia</label>
  <select wire:model.lazy="ubicacionSeleccionada" class="form-control" id="ubicacion">
       <option value=''>Seleccionar provincia</option>
       @foreach($ubicaciones as $ubicacion)
       <option value="{{$ubicacion->id}}">{{ $ubicacion->ubicacion }}</option>
       @endforeach                                          
  </select>
  </div>
                                        
    
   <div class="form-group">
   <label for="tipopropiedad">Localidad</label>
   <select wire:model.lazy="area" class="form-control" id="localidad
         {{ count($this->areas)== 0 ? 'hidden' : '' }} ">
         <option value=''>Seleccionar localidad</option>
         @foreach($this->areas as $area)
         <option value={{ $area->id }}>{{ $area->name }}</option>
         @endforeach
   </select>
   </div>