有没有办法在Laravel刀片模板中使用javascript变量?

时间:2016-08-22 10:05:42

标签: jquery laravel laravel-5 laravel-blade

我将在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 +’]’) }}">'

但不起作用。

有没有人有个好主意来解决这个问题?

4 个答案:

答案 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'])