PHP:获取foreach之外的值

时间:2017-09-10 10:07:11

标签: javascript php jquery laravel foreach

我在html表中嵌套了foreach循环:

@foreach ($getUsers as $key => $commits)
    @foreach ($commits->getLinks as $key1 => $links)
        <tr>
            <td>
                <input type="hidden" name="" id="applicant_id" value="{{$commits->id}}">
            <td>
        <tr>
    @endforeach
@endforeach

接下来我有一个表单,我需要在上面的foreach循环中的隐藏字段中定义的行的id

下面的表单中我有另一个隐藏的输入字段,其中我将隐藏的字段值隐藏隐藏到表单隐藏字段值但它总是只提供一个id(每个表行的id相同)

  

Jquery用于从foreach隐藏输入中获取id 形成隐藏输入:

    $(document).ready(function(){
        var applicant_id = $('#applicant_id').val();
        $("#applicant").val(applicant_id);
    })
  

表格

<form class="form-horizontal" method="POST" action="{{route('upload-agreement')}}" enctype="multipart/form-data">
    {{csrf_field()}}
    <input type="hidden" name="applicant" id="applicant" >
    <input type="file" name="file" class="form-control" required="">
    <button type="submit" class="btn btn-primary">Save changes</button>
</form>

问题:上述方法总是给我id

3 个答案:

答案 0 :(得分:3)

根据您的评论,以及您只有一个表单的事实。您需要通过提供按钮或其他东西供用户点击来动态加载正确的ID。

@foreach ($getUsers as $key => $commits)
  @foreach ($commits->getLinks as $key1 => $links)
    <tr>
        <td>
            <button class="edit" data-id="{{$commits->id}}" >Edit</button>
        <td>
    <tr>
  @endforeach
@endforeach


$(document).ready(function(){
    $('.edit').click(function(){
        $("#applicant").val($(this).data('id'));
    });
});

我还会将您的表单放在各种模式窗口中......这样您点击时就可以弹出它,这样它就可以提供易于使用的交互式用户体验。

我提供了一个例子。 (需要Bootstrap框架)

JS

$(document).ready(function(){
    $('.edit').click(function(){
        $('#myModal').modal({backdrop:'static'});
        $("#applicant").val($(this).data('id'));
    });
});

HTML

<div id="myModal" class="modal fade" role="dialog">
  <div class="modal-dialog">
   <div class="modal-content">
    <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal">&times;</button>
    <h4 class="modal-title">Upload File</h4>
  </div>
  <div class="modal-body">
    <form class="form-horizontal" method="POST" action="{{route('upload-agreement')}}" enctype="multipart/form-data">
       {{csrf_field()}}
       <input type="hidden" name="applicant" id="applicant" >
       <input type="file" name="file" class="form-control" required="">
      <button type="submit" class="btn btn-primary">Save changes</button>
    </form>
  </div>
  <div class="modal-footer">
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  </div>
</div>

答案 1 :(得分:2)

正如html规范所说:

  

id属性指定其元素的唯一标识符(ID)。该值必须在元素的主子树中的所有ID中唯一,并且必须至少包含一个字符。该值不得包含任何空格字符。

https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attribute

您不希望您的数据库记录在表格中有重复的ID,不是吗?嗯,同样的经验法则适用于页面中的HTML元素。当您打算稍后与它们进行交互时,在循环数据库项目以供显示时,请务必记住这一点。

在你的情况下:

 <input type="hidden" name="" id="applicant_id" value="{{$commits->id}}">

您可能在这里错误地输入了元素的id和name属性。 name属性用于在提交父表单时将名称与值相关联。 id属性正如它所说的那样 - 一个标识符是唯一的,对css样式或javascript操作有用(通过document.getElementById()方法或其jQuery对应的$('#FindThisIdForMe'))。

在dom中有重复的id值可能是无害的,但仍会使你的html无效,并且可能会破坏元素检索(因为顾名思义,该方法应该检索一个元素或者什么都不需要,必须处理多个候选人)。

在id属性值中附加某种变量可以解决问题,例如: :

 <input type="hidden" name="" id="applicant_id_{{$commits->id}}" value="{{$commits->id}}">

依次修复jQuery选择器。

您可能会,也可能不会想要将隐藏输入的name属性设置为相同的值,具体取决于您是否打算提交表单。

答案 2 :(得分:1)

你循环遍历数组但是在每个迭代中创建一个具有相同id的输入,而不是id设置dom中可以愉快地存在的输入classname或data-attribute,id应该是唯一的并且当你选择元素时id应该只有一个或者你可能得错了