有没有办法在 Laravel blade 模板中使用 javascript 变量?
Is there a way to use javascript variable inside Laravel blade template?
我将在 jQuery 中自动创建 table 的行。通过单击 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 放入 blade 模板“{{ old(‘item’) }}”。
同样是{{ $errors->first(‘item’) }}.
我试着这样写
'value="{{ old('giftValue[' . $rowCount .']') }}">'
还有这个
'value="{{ old('giftValue[' + $rowCount +’]’) }}">'
但不起作用。
有没有人有解决这个问题的好主意?
执行 Ajax 调用以使用 javascript 路由和显示。像这样:
$.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);
});
我会将输入创建为输入数组:
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
不确定这是否是正确的方法,但您可以尝试将错误和旧输入存储在变量中并使用它。
示例如下:
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);
}
谢谢大家回答我的问题,但是
没有答案可以同时解决旧值和验证错误的问题。
最后,我写了JS代码,我也写了一个服务器端代码,几乎和JS一样。
正如 Mina Abadir 所说,我不应该向 JS 添加服务器端代码。
如果验证失败,我只在服务器端代码中渲染旧值和验证错误,这样,最困难的部分是我必须使用 Validator::make
将每个错误添加到一个variable($items[$key]['oldvalue'] and $items[$key]['error'])
,会在服务端代码中显示。
服务器端代码如:
@if(validation_failed) {
<input name="item[{{ $key }}]" type="text" value="{{ $items[$key]['oldvalue'] }}">
@if (!empty($items[$key]['error']))<p class="formTable_error">{{ $items[$key]['error'] }}</p>@endif
}
我将在 jQuery 中自动创建 table 的行。通过单击 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 放入 blade 模板“{{ old(‘item’) }}”。 同样是{{ $errors->first(‘item’) }}.
我试着这样写
'value="{{ old('giftValue[' . $rowCount .']') }}">'
还有这个
'value="{{ old('giftValue[' + $rowCount +’]’) }}">'
但不起作用。
有没有人有解决这个问题的好主意?
执行 Ajax 调用以使用 javascript 路由和显示。像这样:
$.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);
});
我会将输入创建为输入数组:
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
不确定这是否是正确的方法,但您可以尝试将错误和旧输入存储在变量中并使用它。
示例如下:
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);
}
谢谢大家回答我的问题,但是 没有答案可以同时解决旧值和验证错误的问题。
最后,我写了JS代码,我也写了一个服务器端代码,几乎和JS一样。 正如 Mina Abadir 所说,我不应该向 JS 添加服务器端代码。
如果验证失败,我只在服务器端代码中渲染旧值和验证错误,这样,最困难的部分是我必须使用 Validator::make
将每个错误添加到一个variable($items[$key]['oldvalue'] and $items[$key]['error'])
,会在服务端代码中显示。
服务器端代码如:
@if(validation_failed) {
<input name="item[{{ $key }}]" type="text" value="{{ $items[$key]['oldvalue'] }}">
@if (!empty($items[$key]['error']))<p class="formTable_error">{{ $items[$key]['error'] }}</p>@endif
}