我在 Laravel 下有一个简单的任务列表项目。
当我单击复选框时,它不显示选中状态。 (第二项在数据库中处于真实状态,因此显示已选中。我无法取消选中此项)我在网上搜索了原因的答案,但找不到解决方案或原因。
代码:
home.blade.php(在 View 文件夹中)-
@extends('layouts.main')
@section('content')
<h1>Tasks</h1>
<ul>
@foreach ($items as $item)
<li>
{{ Form::open() }}
<input type="checkbox" onClick="this.form.submit()" {{ $item->done ? 'checked' : '' }}>
<input type="hidden" name="id" value="{{ $item->id }}">
{{ $item->name }}
{{ Form::close() }}
</li>
@endforeach
</ul>
@stop
HomeController.php(在Controllers文件夹中)-
<?php
class HomeController extends BaseController {
public function getIndex() {
$items = Auth::user()->items;
return View::make('home', array(
'items' => $items
));
}
public function postIndex() {
$id = Input::get('id');
$user_id = Auth::user()->id;
$item = Item::findOrFail($id);
if($item->owner_id == $userId) {
$item->mark();
}
return Redirect::route('home');
}
}
Item.php(在模型文件夹中)-
<?php
class Item extends Eloquent {
public function mark() {
$this->$done = $this->done ? false : true;
$this->save();
}
}
routes.php-
<?php
Route::get('/', array('as' => 'home', 'uses' => 'HomeController@getIndex'))->before('auth');
Route::post('/', array('uses' => 'HomeController@postIndex'))->before('csrf');
Route::get('/login', array('as' => 'login', 'uses' => 'AuthController@getLogin'))->before('guest');
Route::post('login', array('uses' => 'AuthController@postLogin'))->before('csrf');
最佳答案
在您的代码中,您永远不会更新模型的done值。我想,您想用 post 方法更改它。因此您需要从复选框名称中获取值(例如 Input::get('box-ID')
)
您还可以使用表单类创建一个复选框:
// public function checkbox($name, $value = 1, $checked = null, $options = array())
{{ Form::checkbox('name', 'value', true, ['onClick' => 'alert(123)']) }}
关于php - Laravel - 使用 onclick 从复选框提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23331597/