【问题标题】:Get the old selected value of a dynamicaly filled dropdown获取动态填充下拉列表的旧选定值
【发布时间】:2021-12-25 03:02:30
【问题描述】:

我有两个相对的下拉列表,当从第一个下拉列表中选择类别时,供应商会使用此脚本自动从数据库填充到第二个下拉列表中:

<script>
   $('#first-choice').change(function(){

        if( $('#first-choice :selected').length > 0){
            var selectednumbers = [];
            $('#first-choice :selected').each(function(i, selected) {
                selectednumbers[i] = $(selected).val();
            });
            $.ajax({
                url: '{{ url('get_fournisseurs') }}',
                method:'GET',
                data: {selectednumbers: selectednumbers },
                dataType: 'json',
                success: function(dataResult){

                    var resultData = dataResult.data;
                    $('#second-choice').empty();
                    $.each(resultData, function(i,row){
                        //$('#second-choice').append(new Option( row.id+'-'+row.nomSociete, row.id));
                        $('#second-choice').append(`<option value="${row.id}" {old('fournisseur') = ${row.id} ? 'selected' : ''} >
                                   ${row.id+'-'+row.nomSociete}
                              </option>`);
                    })
                }//value="{{$s->id}}" {{(collect(old('categorie'))->contains($s->id)) ? 'selected' : '' }}
            });
        }
    });
</script>

现在,如果出现错误,我的所有输入仍然被填充,除了第二个下拉列表 (id="second -choice") 它是空的,我想在错误之前使用旧值:

这是我的动态下拉列表的代码:

<div class="form-group col-md-6 col-sm-12">
    <b for="donationinput4">Fournisseur<span style="color: #fbb710;">*</span></b>
    <div class="input-group">

        <select class="custom-select @error('fournisseur') is-invalid @enderror" name="fournisseur" id="second-choice">
            <option value="">---------Selectionner un fournisseur---------</option>
        </select>
        <div class="input-group-append">
            <a href="{{ url('fournisseurs/create') }}" class="btn btn-pink" type="button"><i class="la la-plus-square"></i></a>
        </div>
    </div>
     @if($errors->has('fournisseur'))
        <span class="text-danger">{{ $errors->first('fournisseur') }}</span>
    @endif
</div>

在 jQuery 脚本中使用 old() 函数的正确语法是什么?

【问题讨论】:

    标签: html jquery ajax laravel validation


    【解决方案1】:

    在laravel中使用oldhelper的语法是这样的:

    {{ old('field_name') }}
    

    这会将它作为字符串打印到 HTML 页面,所以如果你想在脚本中使用它,你必须以某种方式解析它。

    但据我所知,这仅在错误是验证错误时才有效, 除非您在错误发生后重定向页面,如下所示:

    return redirect()->back()
       ->withInput($request->except('_token')) // or whatever, ->all() also works 
       ->withErrors($validationErrors)
    

    但无论如何在脚本中使用旧数据的正确语法:

    
    <script> 
      let oldData = JSON.parse('{{json_encode(old("field_name"))}}');
      // you can use it now, you have parsed the same object that u received in the backend
      ...
    </script>
    

    【讨论】:

    • 对不起,我不明白如何使用该变量,我需要在选项标签中添加一些内容,如下所示:$('#second-choice').append(@987654325 @);
    • 当我尝试该行时,它给了我这个错误: Uncaught ReferenceError: json_encode is not defined at Object. (create:417) at Function.each (vendors.min.js:2)在 Object.success (create:415) 在 i (vendors.min.js:2) 在 Object.fireWith [as resolveWith] (vendors.min.js:2) 在 A (vendors.min.js:4) 在 XMLHttpRequest . (vendors.min.js:4)
    • 您想从 ajax 响应回调中处理它吗?或者它会重新加载页面?
    猜你喜欢
    • 1970-01-01
    • 2020-06-26
    • 2015-02-16
    • 1970-01-01
    • 2019-04-08
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多