我在视图中有以下代码:
@foreach($totalUsers as $user)
<tr>
<td class="v-a-m ">
<input type="checkbox" class="user" name="user" value="{{$user->id}}">
<input type="hidden" name="city" value="{{$user->city}}">
</td>
<td class="v-a-m text-white">
<span>{{$user->name}}</span>
</td>
<td class="v-a-m">
<span>{{$user->cnic}}</span>
</td>
</tr>
@endforeach
一些Jquery:
$('input.user').on('change', function() {
$('input.user').not(this).prop('checked', false);
});
hidden field
未返回其iteration
结果,而是返回数据库表格中最后一行的结果。
dd($request->all());
会返回请求,但city
具有表格最后一行的值,经过了充分测试。
我想要的是hidden
字段应返回当前的迭代城市。
我在这里做错了什么?
答案 0 :(得分:1)
只是您不能拥有多个具有相同名称的输入字段。
如果您将用户export class AppComponent{
menus: any[];
constructor() {
this.menus = [
{
name: 'home',
status: 0
},
{
name: 'about',
status: 1
}
]
}
updateChecked(menu, event) {
console.log(this.menus); // inspect menu, menus and event here
}
}
传递给控制器,或者您可以查询用户表的任何内容,那么您可以获得完全相同的用户的城市,您选中了复选框。
喜欢:
id
您应该将public function findUser(Request $request){
//You can pass anything here with `where()`, E.g name,username
$user = \App\User::find($request->get('id'));
//Do the rest...
}
与雄辩first()
答案 1 :(得分:0)
如果您需要用户选择其中一个选项,则需要将checkbox
替换为radio
按钮。
这样,只允许选择一个选项。
CSS和JS可以帮助您隐藏城市广播并使其与用户广播同步:
@foreach($totalUsers as $user)
<tr>
<td class="v-a-m">
<label class="user-label">
<input type="radio" class="user-radio" name="user" value="{{ $user->id }}"/>
{{ $user->id }}
</label>
<input type="radio" class="city-radio" name="city" value="{{ $user->city }}"/>
</td>
<td class="v-a-m text-white">
<span>{{ $user->name }}</span>
</td>
<td class="v-a-m">
<span>{{ $user->cnic }}</span>
</td>
</tr>
@endforeach
<style>
.city-radio {
display: none;
}
</style>
<script>
$(document).ready(function() {
$('.user-label').change(function () {
$(this).parent().find('.city-radio').prop("checked", true);
});
});
</script>
答案 2 :(得分:0)
您可以通过用户输入“禁用/启用”要发送的城市,以便在您的更改事件中“允许/阻止”隐藏字段提交到服务器:
$('input.user').on('change', function() {
$('input.user').not(this).attr('selected', false);
$('input.city').attr('disabled','disabled');
$(this).siblings('input.city').removeAttr('disabled');
});
您可以看到只有具有所选用户的相关城市将在提交操作中发送。
希望这有帮助。
$('input.user').on('change', function() {
$('input.user').not(this).attr('selected', false);
$('input.city').attr('disabled','disabled');
$(this).siblings('input.city').removeAttr('disabled');
});
$(document).on('submit','form.remember',function(e){
console.log($(this).serialize());
return false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="remember">
<table>
<tr>
<td class="v-a-m ">
<input type="radio" name="user" class="user" value="1" />
<input type="hidden" name="city" class="city" value="city_1" disabled />
</td>
<td class="v-a-m text-white"><span>name 1</span></td>
<td class="v-a-m"><span>cnic 1</span></td>
</tr>
<tr>
<td class="v-a-m ">
<input type="radio" name="user" class="user" value="2" />
<input type="hidden" name="city" class="city" value="city_2" disabled />
</td>
<td class="v-a-m text-white"><span>name 2</span></td>
<td class="v-a-m"><span>cnic 2</span></td>
</tr>
<tr>
<td class="v-a-m ">
<input type="radio" name="user" class="user" value="3" />
<input type="hidden" name="city" class="city" value="city_3" disabled />
</td>
<td class="v-a-m text-white"><span>name 3</span></td>
<td class="v-a-m"><span>cnic 3</span></td>
</tr>
<tr>
<td class="v-a-m ">
<input type="radio" name="user" class="user" value="4"/>
<input type="hidden" name="city" class="city" value="city_4" disabled />
</td>
<td class="v-a-m text-white"><span>name 4</span></td>
<td class="v-a-m"><span>cnic 4</span></td>
</tr>
</table>
<input type="submit" value="Submit values"/>
</form>
答案 3 :(得分:0)
您的表单不能包含多个具有相同名称的输入字段。它与复选框一起使用,因为它将值存储在具有相同名称的数组中。但是输入类型hidden将返回具有相同名称的表单的最后一个输入的值,这是表的最后一行。换句话说,该值被最后一个输入字段覆盖。
当您使用city[]
时,它将返回所有城市的数组,这不是您想要的。
我们了解您将隐藏字段包含在用户所在城市的目的。你难道不能从你的控制器中检索这些数据吗?
foreach($request->user as $user) {
$user->city // and do your login here.
}