【发布时间】:2019-12-31 20:07:05
【问题描述】:
我正在使用 Laravel-5.8 开发一个 Web 应用程序。在项目中,我尝试使用基于条件的选择选项更改来动态添加输入字段。最初这是成功的,但后来我遇到了错误。
控制器
public $rating_points = [
"1" => "Three-Star-Rating",
"2" => "Four-Star-Rating",
"3" => "Five-Star-Rating",
"4" => "Six-Star-Rating",
"5" => "Seven-Star-Rating",
];
public function create()
{
return view('appraisal.ratings.create')->with('rating_points', $this->rating_points);
}
public function store(StoreRatingRequest $request)
{
$input = Input::all();
for ($idx = 0; $idx < count(Input::get('id')); $idx++)
{
$rating = new AppraisalRating;
$rating->rating_point = $input['rating_point'][$idx];
$rating->rating_type = $input['rating_type'][$idx];
$rating->rating_value = $input['rating_value'][$idx];
$rating->rating_description = $input['rating_description'][$idx];
$rating->save();
}
Session::flash('success', 'Appraisal Rating is created successfully');
return redirect()->route('appraisal.ratings.index');
}
查看:create.blade
<div class="card-body">
<form action="{{route('appraisal.ratings.store')}}" method="post" class="form-horizontal" enctype="multipart/form-data">
{{csrf_field()}}
<div class="form-body">
<div class="row">
<div class="col-md-12">
<div class="form-group row">
<label for="rating-point" class="col-4 col-form-label"> Rating Point<span style="color:red;">*</span></label>
<div class="col-md-6 controls">
<select id='rating-point' class="form-control select2" data-placeholder="Choose Rating Value" tabindex="1" name="rating_point[]">
<option value="">Select Rating Point</option>
@foreach($rating_points as $k => $rating_point)
<option value="{{$k}}" @if(old("rating_point") == "$k") selected @endif>{{$rating_point}}</option>
@endforeach
</select>
</div>
</div>
</div>
</div>
<div class="row" id="rating-data"></div>
</div>
<div id="rating-button" style="display: none;">
<button type="submit" class="btn btn-primary">{{ trans('global.save') }}</button>
<button type="button" onclick="window.location.href='{{route('appraisal.ratings.index')}}'" class="btn btn-default">Cancel</button>
</div>
</form>
</div>
@endsection
@section('javascript')
<!-- jQuery -->
<script src="{{ asset('theme/adminlte3/plugins/jquery/jquery.min.js') }}"></script>
<!-- jQuery UI 1.11.4 -->
<script src="{{ asset('theme/adminlte3/plugins/jquery-ui/jquery-ui.min.js') }}"></script>
<script>
$(document).ready(function($){
$('#rating-point').on('change', function() {
$('#rating-data').html('');
if ( this.value == '1')
{
var numInputs = '3';
for(var i=0; i < numInputs; i++)
{
var j = i*1+1;
var $section = $('<div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Type<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="text" name="rating_type[]" value="'+j+'" class="form-control" value="{{old('rating_type')}}" readonly></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Value<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="number" name="rating_value[]" placeholder="Rating Value" class="form-control" value="{{old('rating_value')}}"></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Description<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="text" name="rating_description[]" placeholder="Enter rating description here" class="form-control" value="{{old('rating_description')}}"></div></div></div>');
$('#rating-data').append($section);
}
$("#rating-button").show();
}
else if ( this.value == '2')
{
var numInputs = '4';
for(var i=0; i < numInputs; i++)
{
var j = i*1+1;
var $section = $('<div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Type<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="text" name="rating_type[]" value="'+j+'" class="form-control" value="{{old('rating_type')}}" readonly></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Value<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="number" name="rating_value[]" placeholder="Rating Value" class="form-control" value="{{old('rating_value')}}"></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Description<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="text" name="rating_description[]" placeholder="Enter rating description here" class="form-control" value="{{old('rating_description')}}"></div></div></div>');
$('#rating-data').append($section);
}
$("#rating-button").show();
}
else if ( this.value == '3')
{
var numInputs = '5';
for(var i=0; i < numInputs; i++)
{
var j = i*1+1;
var $section = $('<div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Type<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="text" name="rating_type[]" value="'+j+'" class="form-control" value="{{old('rating_type')}}" readonly></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Value<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="number" name="rating_value[]" placeholder="Rating Value" class="form-control" value="{{old('rating_value')}}"></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Description<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="text" name="rating_description[]" placeholder="Enter rating description here" class="form-control" value="{{old('rating_description')}}"></div></div></div>');
$('#rating-data').append($section);
}
$("#rating-button").show();
}
else if ( this.value == '4')
{
var numInputs = '6';
for(var i=0; i < numInputs; i++)
{
var j = i*1+1;
var $section = $('<div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Type<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="text" name="rating_type[]" value="'+j+'" class="form-control" value="{{old('rating_type')}}" readonly></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Value<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="number" name="rating_value[]" placeholder="Rating Value" class="form-control" value="{{old('rating_value')}}"></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Description<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="text" name="rating_description[]" placeholder="Enter rating description here" class="form-control" value="{{old('rating_description')}}"></div></div></div>');
$('#rating-data').append($section);
}
$("#rating-button").show();
}
else if ( this.value == '5')
{
var numInputs = '7';
for(var i=0; i < numInputs; i++)
{
var j = i*1+1;
var $section = $('<div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Type<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="text" name="rating_type[]" value="'+j+'" class="form-control" value="{{old('rating_type')}}" readonly></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Value<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="number" name="rating_value[]" placeholder="Rating Value" class="form-control" value="{{old('rating_value')}}"></div></div></div><div class="col-md-4"><div class="form-group row"><label class="control-label text-right col-md-3">Description<span style="color:red;">*</span></label><div class="col-md-9 controls"><input type="text" name="rating_description[]" placeholder="Enter rating description here" class="form-control" value="{{old('rating_description')}}"></div></div></div>');
$('#rating-data').append($section);
}
$("#rating-button").show();
}
else
{
$("#rating-button").hide();
}
});
});
</script>
@stop
我希望当页面加载时我应该只看到选择选项下拉列表,当我选择更改时我应该看到类似上图的内容,然后保存到数据库中。
最初页面正在加载,但是当我向控制器添加一些代码时,我收到了这个错误:
错误异常 (E_ERROR) 未定义变量:rating_points(查看:C:\xampp\htdocs\appraisal\resources\views\appraisal\ratings\create.blade.php)
页面没有再次加载。
我该如何解决。
谢谢
【问题讨论】:
-
这里的代码很多,你的问题有点不清楚。
when I added some code ... I got this error- 什么代码?when I select on change- 如果页面没有加载,你还没有看到这个,对吧?如果页面没有加载,那么你的store()方法,可能你的大部分(全部?)JS 与这个直接问题无关?一次解决一个问题。如果您编辑它并删除所有这些,您可以使这个问题更容易阅读/理解/回答。尝试创建一个minimal, complete, and verifiable example。 -
这是我在控制器中添加的将其保存为数组的代码: for ($idx = 0; $idx
-
你在哪一行得到错误?
-
@mdexp - 视图中的第 81 行。这是哪个; @foreach($rating_points as $k => $rating_point)