首页 > 解决方案 > Laravel - 如果更改下拉列表中的语句失败

问题描述

在我的 Laravel-5.8 项目中,我试图根据更改值的下拉列表加载到文本框中:

看法

<form  action="{{route('sports.store')}}" method="post" class="form-horizontal" enctype="multipart/form-data">
  {{csrf_field()}}
  <div class="card-body">
    <div class="form-body">
      <div class="row">
        <div class="col-12 col-sm-6">
          <div class="form-group">
            <label class="control-label"> Sport Type:<span style="color:red;">*</span></label>
            <select id="sport_type" class="form-control @error('sport_type_id') is-invalid @enderror" name="sport_type_id">
              <option value="">Select Sport Type</option>
              @foreach ($categories as $category)
                @unless($category->name === 'Joggings')
                  <option hidden value="{{ $category->id }}" {{ $category->id == old('sport_type_id') ? 'selected' : '' }}>{{ $category->name }}</option>
                  @if ($category->children)
                    @foreach ($category->children as $child)
                      @unless($child->name === 'Joggings')
                        <option value="{{ $child->id }}" {{ $child->id == old('sport_type_id') ? 'selected' : '' }}>&nbsp;&nbsp;{{ $child->name }}</option>
                      @endunless
                    @endforeach
                  @endif
                @endunless
              @endforeach
            </select>
          </div>
        </div>    
        <input type="hidden" id="max_score" class="form-control">
        <div class="col-12 col-sm-6">
          <div class="form-group">
            <label class="control-label"> Score:<span style="color:red;">*</span></label>
            <input type="number" name="score" id="total_score" value="{{ old('score', $sport->score) }}" placeholder="Enter score here" class="form-control @error('score') is-invalid @enderror">
          </div>
        </div>  
      </div>
    </div>
  </div>          
  <!-- /.card-body -->
  <div class="card-footer">
    <button type="submit" class="btn btn-primary">{{ trans('global.save') }}</button>
  </div>           
</form>

<script type="text/javascript">
$(document).ready(function() {
  $(document).on('change', '#sport_type', function() {
    var air_id =  $(this).val();
    var a = $(this).parent();
    var op = "";
    var inputweight = $('input[name="score"]');      

    $.ajax({
      type: 'get',
      url: '{{ route('get.scores.all') }}',
      data: { 'id': air_id },
      dataType: 'json',      //return data will be json
      success: function(data) {
        console.log(data.maxscore);
        $('#max_score').val(data.maxscore);

        if ($.trim($('option:selected', this).text()) == 'wrestling') {
          inputweight.prop('readonly', true);
          $('#total_score').val(data.maxscore);
        } else {
          inputweight.prop('readonly', false);
        }                
      },
      error: function() { }
    });
  });
});
</script>

在上面的jQuery中,我想加载

val(data.maxscore)

进入

#total_score

那是,

$('#total_score').val(data.maxscore);

但我发现它不起作用。什么都没有显示。

最初我虽然条件不正确,但当我确认时我看到它是正确的。另外,当我删除 if 语句时,它会加载

$('#total_score').val(data.maxscore);

我该如何解决这个问题?

谢谢

标签: jquerylaravel

解决方案


似乎由于回调this内部变量的上下文不正确而发生错误。success尽量避免使用它,例如,像这样:

if ($.trim($('#sport_type option:selected').text()) == 'wrestling') {
    ...
} else {
    ...
}

推荐阅读