感谢您抽出宝贵的时间来研究我的问题。 我遇到一种情况,我想获取复选框的“已检查”状态并将相应的值/ id返回给控制器。
该想法是将输入字段的值添加到如下图所示的点:
您可能已经发现,我想向Maverick和Sidney教授添加200点(虚拟数据)
这应该在我单击“添加点”按钮时发生。
我设法将输入值传递给控制器:
home.blade.php的一小部分
<form action="/addpoints" method="post">
@csrf
<div class="field has-addons">
<div class="control has-icons-left">
<input class="input" type="tel" placeholder="" id="pointsInput" name="pointsInput">
<span class="icon is-small is-left">
<i class="fas fa-coins"></i>
</span>
</div>
<div class="control">
<button class="button is-info" id="addPoints">Add Points</button>
</a>
</div>
</div>
</form>
(如果类名看起来很陌生,那是因为我正在使用Bulma CSS。)
这是我尝试过的:
HomeController.php
public function addPoints(Request $request)
{
$member = new Member; <-- Member model contains a points fillable
$checked = $request->addPoints;
$points = $request->pointsInput; <-- this returns the correct data
return redirect('/home');
}
web.php
Route::get('/home', 'HomeController@index');
Route::post('/home', 'HomeController@store');
Route::post('/addpoints', 'HomeController@addPoints')->name('addpoints');
Route::get('/home/{id}', 'HomeController@edit');
Route::patch('/home/{id}', 'HomeController@update');
Route::delete('/home/{id}', 'HomeController@destroy');
Route::get('/home/search', 'HomeController@search')->name('home.search');
包含复选框的表的第一部分:
<tr>
<td><input type="checkbox" value="{{ $member->id }}" name="addPoints"></td>
<td>{{ $member->name }}</td>
<td>{{ $member->email }}</td>
<td>{{ $member->size }}</td>
<td>{{ $member->points }}</td>
预先感谢您对此的关注。任何帮助表示赞赏!
答案 0 :(得分:0)
您应该在上面表单的隐藏字段中跟踪这些复选框的值。您可以简单地获取所有选中的复选框,并使用jQuery或您使用的任何内容隐藏其唯一标识符。
$('#my-form').on('submit', function (e) {
e.preventDefault();
var checked = [];
$('.my-checkbox').each(function() {
let checkboxId = $(this).data('id');
checked.push(checkboxId);
});
$('#my-hidden-field').val(checked);
$(this).submit();
});
这样做之后,您只需获取隐藏字段值并在PHP端使用它即可。
答案 1 :(得分:0)
您应使用此 form 包装您的复选框,并且它们必须位于button[type=submit]
上方。但是根据您的情况,没有拐杖就不可能做到这一点(您可以将隐藏按钮放在桌子后面,并在单击#addPoints
时发出点击声)。
但是,我认为,最好的方法是根据Ajax请求发送表单数据。