【问题标题】:Dynamic route path in form action based on the selected option in Laravel基于 Laravel 中选定选项的表单操作中的动态路由路径
【发布时间】:2017-09-12 07:16:04
【问题描述】:

我在 laravel 5.4 视图中有这样的表格:

<form action="#" method="POST" class="form-inline" role="form">
        {{ csrf_field() }}
            <div class="form-group">
                <select id="tdcategory" class="selectpicker show-tick show-menu-arrow" onchange="this.form.submit()">
                  @foreach($categories as $category)
                        <option value="{{ $category->id }}">{{ $category->name }}</option>
                  @endforeach
                </select>
            </div>
            <div class="form-group">
            <select id="tdlocation" class="selectpicker show-tick show-menu-arrow" onchange="this.form.submit()">
                @foreach($locations as $location)
                    <option value="{{ $location->id }}">{{ $location->name }}</option>
                @endforeach
            </select>
            </div>
</form>

我有两个问题:

1) 如何将表单操作动态设置为类似

类别/{category->id}/locations/{location->id}

在哪里,category->id 和 location->id 都将基于用户当前选择的选项的值

2) 由于表单是在用户更改选项时提交的,因此页面会重新加载并重置两个&lt;select&gt; 标记。如何跟踪先前选择的选项,并且在页面加载时,我可以向用户显示他/她在提交表单之前选择了哪个选项?

【问题讨论】:

    标签: javascript forms laravel laravel-blade


    【解决方案1】:

    1)你可以通过 JS 来做到这一点:从选择中删除“onchange”属性,并添加初始代码,如下所示:

    $('#tdcategory,#tdlocation').change(function(){
        var category = $('#tdcategory').val();
        var location = $('#tdlocation').val();
    
        if (category && location) {
            $(this).closest('form')
                .attr('action', '/categories/'+ category +'/locations/' + location)
                .submit();
        }
    });
    

    2) 您可以从请求中获取提交的值,并在每个选择中添加插入 selected="selected" 属性的条件,如下所示:

    <select id="tdcategory" name="tdcategory" class="selectpicker show-tick show-menu-arrow">
        @foreach($categories as $category)
            <option value="{{ $category->id }}" @if($category->id == request()->get('tdcategory'))selected="selected"@endif>{{ $category->name }}</option>
        @endforeach
    </select>
    
    <select id="tdlocation" name="tdlocation" class="selectpicker show-tick show-menu-arrow">
        @foreach($locations as $location)
            <option value="{{ $location->id }}" @if($location->id == request()->get('tdlocation'))selected="selected"@endif>{{ $location->name }}</option>
        @endforeach
    </select>
    

    【讨论】:

      猜你喜欢
      • 2018-05-11
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 2017-04-26
      • 2017-03-12
      • 1970-01-01
      相关资源
      最近更新 更多