【问题标题】:Reload issue with Laravel Livewire and Bootstrap formLaravel Livewire 和 Bootstrap 表单的重新加载问题
【发布时间】:2020-12-14 03:20:38
【问题描述】:

当我使用任何 Javascript 表单时,我发现了一个 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 都会生成一个将表单带到第一部分的事件。好像是REFRESH

有谁知道我如何使用 livewire 而不带来这种不便?

版本

按钮下一个视图

<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
        }, {
            step: function(now) {
                // for making fielset appear animation
                opacity = 1 - now;

                current_fs.css({
                    'display': 'none',
                    '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;
    })

});

【问题讨论】:

    标签: javascript ajax laravel laravel-livewire


    【解决方案1】:

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

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

    【讨论】:

    • 我不想利用您的慷慨,但添加我的下一个视图按钮和 javascript 代码。可以举个例子吗?
    • 您能否在phpsandbox.io 实例中提供您的基本组件、视图和JavaScript?它会为我节省大量时间,并且会生成可以立即使用的代码。
    【解决方案2】:

    你可以使用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>
    

    【讨论】:

    • 您好,如果我这样使用,只有下拉菜单不起作用,并且使用 WIRE: IGNORE 会重新加载表单
    猜你喜欢
    • 2020-11-09
    • 2021-08-21
    • 1970-01-01
    • 2021-10-08
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    相关资源
    最近更新 更多