如何选中复选框并取消选中这两个值?

时间:2018-06-05 20:54:34

标签: jquery laravel checkboxlist

我正在使用laravel ACL。在每个角色中都有权限组。我使用复选框表示所有权限。当我提交表单时,它只会检查权限值。但我希望得到所有检查和未检查的价值。 enter image description here

当我点击“更新”按钮时,它只显示这些值

[
    {
        "read": "true",
        "create": "true"
    }
]

我希望得到这样的价值。

[
    {
        "read": "true",
        "create": "true",
        "delete": "false",
        "update": "false"
    }
]

我尝试使用JQuery,但我没有得到预期的结果。如果有任何其他方式请建议。

我的观点部分。

@foreach($role->permissions as $key=>$value)
    <td><input type="checkbox" name="permisssions[{{$key}}]" class="role" value="true"  {{ $value==1 ? 'checked' : '' }}></td>
@endforeach

我的控制器部分。

public function role_permissions_update(Request $request, $id)
{
    return array($request->permisssions);

}

2 个答案:

答案 0 :(得分:0)

您可以考虑在控制器之前的请求清理程序中进行操作,而不是在UI中执行此操作。像这样......

MyController.php

<?php
namespace App\Http\Controllers;
use App\Http\Requests\MyRequest;

class MyController{
    public function myMethod(MyRequest $request){
        //write code only for valid, sanitized requests.
    }
}

MyRequest.php

namespace App\Http\Requests;

class MyRequest extends SanitizedRequest{

protected static $bools = ['check_box_a','check_box_b'];

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules(){
    return [
        //
    ];
   }
}

SanitizedRequest.php(我猜可能是抽象的)

<?php
namespace App\Http\Requests;


use Illuminate\Foundation\Http\FormRequest;

class SanitizedRequest extends FormRequest{

/**
 * @var bool
 */
private $clean = false;

/**
 * @var array
 */
protected static $arrays = [];

/**
 * @var array
 */
protected static $bools = [];

/**
 * @var array
 */
protected static $nullables = [];

/**
 * @var array
 */
protected static $removeables = [];



/**
 * We will do ALL of our security from middleware.
 *
 * @return bool
 */
public function authorize(){
    return true;
}

/**
 * @return array
 */
public function all($keys = null){
    return $this->sanitize(parent::all($keys));
}

/**
 * @param array $inputs
 *
 * @return array
 */
protected function sanitize(Array $inputs){

    if($this->clean){
        return $inputs;
    }

    // Get the request after middlewares (ie: the way it should be).

    $inputs = $this->request->all();

    $inputs = self::fillStaticDefaults($inputs);
    $inputs = self::numbers($inputs);
    $inputs = self::arrays($inputs);
    $inputs = self::bools($inputs);
    $inputs = self::removeables($inputs);

    if(method_exists($this, 'dynamicDefaults')){
        $inputs = $this->dynamicDefaults($inputs);
    }

    if(method_exists($this, 'preProcessInputs')){
        $inputs = $this->preProcessInputs($inputs);
    }

    $inputs = self::nullables($inputs);

    $this->replace($inputs);
    $this->clean = true;

    return $inputs;

}

/**
 * @param $inputs
 *
 * @return mixed
 */
private static function fillStaticDefaults($inputs){
    if(empty(static::$defaults)){
        return $inputs;
    }

    foreach(static::$defaults as $key => $val){
        if(empty($inputs[$key])){
            $inputs[$key] = $val;
        }
    }

    return $inputs;
}


private static function numbers($inputs){
    foreach($inputs as $k => $input){
        if(is_numeric($input) and !is_infinite($inputs[$k]*1)){
            $inputs[$k] *=1;
        }
    }

    return $inputs;
}

/**
 * @param array $inputs
 *
 * @return array
 */
private static function arrays(Array $inputs){
    foreach(static::$arrays as $array){
        if(empty($inputs[$array])
           or !is_array($inputs[$array])
        ){
            $inputs[$array] = [];
        }
    }

    return $inputs;
}

/**
 * @param array $inputs
 *
 * @return array
 */
private static function bools(Array $inputs){
    foreach(static::$bools as $bool){
        $inputs[$bool] = (!empty($inputs[$bool]) and $inputs[$bool] != '0' and strtolower($inputs[$bool]) != 'false' and $inputs[$bool] != 0) ? 1:0;
    }

    return $inputs;
}

/**
 * @param array $inputs
 *
 * @return array
 */
private static function nullables(Array $inputs){

    foreach($inputs as $k => $input){
        if(is_array($input)){
            $input = self::nullables($input);
            $inputs[$k] = $input;
        }
        if(empty($input) and $input !== 0 and !(in_array($k, static::$bools) or in_array($k, static::$nullables))){
            unset($inputs[$k]);
        }
    }

    foreach(static::$nullables as $null){
        $inputs[$null] = (!empty($inputs[$null])) ? $inputs[$null]:null;
    }

    return $inputs;
}

/**
 * @param array $inputs
 *
 * @return array
 */
private function removeables(Array $inputs){
    if(pos(static::$removeables) == '*'){
        foreach($inputs as $k => $v){
            if(!is_array($v)){
                if(empty($v)){
                    unset($inputs[$k]);
                }
            }else{
                $inputs[$k] = self::removeables($v);
            }
        }

        return $inputs;
    }

    foreach(static::$removeables as $removeable){
        if(empty($inputs[$removeable])){
            unset($inputs[$removeable]);
        }
    }

    return $inputs;
}

}

答案 1 :(得分:0)

如果唯一的问题是获取未选中复选框的值,则可以使用隐藏的输入,例如

<input type="hidden" name="permisssions[{{$key}}]" class="role" value="true"  {{ $value==1 ? 'checked' : '' }}>
        <input type="checkbox" name="permisssions[{{$key}}]" class="role" value="true"  {{ $value==1 ? 'checked' : '' }}>

如果他们选中复选框,您将获得它的值,如果不是,您将获得隐藏输入的值