我将在jQuery中自动创建表的行。通过单击addRow按钮,函数addRow()将执行如下操作:
function addRow(){
var rowCount = $("table tr").length - 1;
var row = '<tr><td><input name=“item[‘+ (rowCount+1) + ']" type="text" value="{{ old(‘item') }}”> @if ($errors->has(‘item’)){{ $errors->first(‘item’) }}@endif<td></tr>' ;
$("table").append(row);
}
我将调用此方法5次,它将创建5个输入区域,其名称为item1。 item2,item3,item4,item5。
在服务器端,我使用Laravel 5.2表单请求验证来验证每个输入字段。
但是如果验证失败,旧的输入和错误将不会设置为正确的输入字段,因为
我无法将javascript变量rowCount放入&#34; {{old('item&#39;)}}“这是一个刀片模板。 同样是{{$ errors-&gt; first('item')}}。
我试着写这样的
'value="{{ old('giftValue[' . $rowCount .']') }}">'
和这个
'value="{{ old('giftValue[' + $rowCount +’]’) }}">'
但不起作用。
有没有人有个好主意来解决这个问题?
答案 0 :(得分:0)
使用javascript进行路由和显示的Ajax调用。像这样:
$.ajax({
url: '/get-rows',
data: { code: code }
})
.done(function(res) {
var response = $.parseJSON(res);
console.log(response);
var $id = $('<input type=hidden name=id />').val(res.id);
var $email = $('<input type=hidden name=email />').val(res.email);
$('form[name="rows"]').append($id).append($email).submit();
})
.fail(function(err) {
console.log('Error: ' + err.status);
});
答案 1 :(得分:0)
我会将输入创建为输入数组:
function addRow(){
var rowCount = $("table tr").length - 1;
var row = '<tr><td><input name=“items[]" type="text"></td></tr>';
$("table").append(row);
}
这可以在后端轻松验证。并且你不应该向JS添加服务器端代码,因为它不起作用。
在您的视图中,检查old
值是否存在,从而运行循环以添加items
。
@if(old('items'))
@for($i=0;$i<=count(old('items'));$i++)
<tr><td><input name=“items[]" type="text" value="old('items')[$i]"></td></tr>
@endforeach
@endif
答案 2 :(得分:0)
不确定这是否是正确的方法,但您可以尝试将错误和oldInput存储在变量中并使用它。
以下示例:
function addRow(){
var errors = {
item1:{{$errors->first('item1')}},
item2:{{$errors->first('item2')}},
item3:{{$errors->first('item3')}},
item4:{{$errors->first('item4')}},
item5:{{$errors->first('item5')}}
}
var rowCount = $("table tr").length - 1;
var row = '<tr>
<td>
<input name=“item[‘+ (rowCount+1) + ']" type="text" value="{{ old(‘item') }}”>
'+errors["item"+(rowCount+1)]+'
</td>
</tr>' ;
$("table").append(row);
}
答案 3 :(得分:0)
谢谢每一个回答我问题的人,但是 没有答案可以解决旧值和验证错误的问题。
最后,我编写了JS代码,并且我还编写了一个与JS几乎相同的服务器端代码。 正如Mina Abadir所说,我不应该向JS添加服务器端代码。
如果验证失败,我只在服务器端代码中呈现旧值和验证错误,这样,最困难的部分是我必须使用Validator::make
将每个错误添加到{ {1}},将显示在服务器端代码中。
服务器端代码如:
variable($items[$key]['oldvalue'] and $items[$key]['error'])