【问题标题】:Passing checked from checkbox to controller将检查从复选框传递到控制器
【发布时间】:2018-08-17 21:06:03
【问题描述】:

感谢您抽出宝贵时间查看我的问题。 我有一种情况是我想获取复选框“已检查”状态并将相应的值/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>

提前感谢您查看此内容。任何帮助表示赞赏!

【问题讨论】:

    标签: javascript php jquery laravel


    【解决方案1】:

    您应该在上方表单的隐藏字段中跟踪这些复选框的值。您可以简单地获取所有选中的复选框并将其唯一标识符与 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端使用它。

    【讨论】:

      【解决方案2】:

      你应该用这个表单包裹你的复选框并且它们必须高于button[type=submit]。但是在你的情况下,没有拐杖是不可能做到的(你可以把隐藏的按钮放在桌子后面,当你点击#addPoints时发出点击它)。

      但是,我认为,最好的方法是通过 Ajax 请求发送表单数据。

      【讨论】:

        猜你喜欢
        • 2014-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-15
        • 2012-12-31
        • 2016-01-31
        • 1970-01-01
        相关资源
        最近更新 更多