我在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
。
下面的表单中我有另一个隐藏的输入字段,其中我将
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
。
答案 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">×</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应该只有一个或者你可能得错了