从复选框传递到控制器

时间:2018-08-17 21:06:04

标签: javascript php jquery laravel

感谢您抽出宝贵的时间来研究我的问题。 我遇到一种情况,我想获取复选框的“已检查”状态并将相应的值/ id返回给控制器。

该想法是将输入字段的值添加到如下图所示的点:

Image

您可能已经发现,我想向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>

预先感谢您对此的关注。任何帮助表示赞赏!

2 个答案:

答案 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请求发送表单数据。