【问题标题】:PHP : Get values outside of foreachPHP:获取 foreach 之外的值
【发布时间】:2018-02-18 17:45:29
【问题描述】:

我在 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

在表单下方我有另一个隐藏的输入字段,我在其中将 foreach 隐藏字段值推入表单隐藏字段值 但它总是只给出一个 id(每个表格行的 id 相同)

用于从 foreach 隐藏输入表单隐藏输入获取 id 的 Jquery:

    $(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

【问题讨论】:

  • 您使用的$commits 变量不会在内部循环中发生变化,这就是我认为的原因,并且您在 jquery 中使用始终返回相同值的字段的 id。
  • 你试过这个吗:stackoverflow.com/a/46110516/2815635 正如我之前建议的那样?
  • 您的页面上不能多次出现相同的id 属性,它必须是唯一的。您应该在循环中附加一个变量,以使其在整个页面中唯一
  • @SagarGautam 没有循环遍历所有$commits,因为$commits 具有getLinks 的内部对象,例如$commits-&gt;getLinks
  • @foreach ($commits-&gt;getLinks as $key1 =&gt; $links) 表示$commits-&gt;id 对于 n $links 将始终相同。

标签: javascript php jquery laravel foreach


【解决方案1】:

根据您的评论,以及您只有一个表格的事实。您需要通过提供一个按钮或其他东西供用户单击来使用正确的 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>

【讨论】:

    【解决方案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}}">
    

    你可能在这里弄错了 input 元素的 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 属性设置为相同的值,具体取决于您是否打算提交表单。

    【讨论】:

    • 有史以来最好的解释...修复jQuery selector 的最佳方法是什么?
    • 对不起,我没时间正确完成答案。幸运的是,您同时得到了另一个有用的答案。祝你的项目好运。
    • 是的,上面的答案很棒,感谢@KyleK,顺便说一句,你的答案非常有用。
    【解决方案3】:

    您正在遍历一个数组,但在每次迭代中创建一个具有相同 id 的输入,而不是 id 设置输入类名或数据属性,可以愉快地共存于 dom 中,id 应该是唯一的,并且当您选择元素时id 应该只有一个,否则你可能会弄错一个

    【讨论】:

    • 你的意思是,我应该给 foreach 隐藏输入中的 applicant_id 唯一的 id ?
    • 示例中每个输入元素的 id 都作为申请人 ID 给出,因此如果您有 10 个项目,您将有 10 个具有此 id 的元素,尽管它们都有不同的值,所以当您使用 $("# application_id").val () 它只会选择一个,并且无论您是否违反 DOM 完整性,您都无法控制选择哪一个。
    • 你的表单的用例有点不清楚,当页面上有10个值时,表单应该如何知道提交哪个值
    猜你喜欢
    • 1970-01-01
    • 2017-08-03
    • 2021-11-05
    • 2011-02-11
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    相关资源
    最近更新 更多