【问题标题】:Post checkbox value's when using dynamic fields使用动态字段时发布复选框值
【发布时间】:2016-02-17 08:53:39
【问题描述】:

我正在构建一个任务列表,我可以在其中为每个用户动态添加和删除字段。我遇到的问题是保存复选框中的数据。

我正在使用以下代码:

<form>    
    @foreach($tasks as $task)
    <div class="col-md-9">
        <input id="taskfield" name="dynamic[]" value="{{ $task->name }}" class="form-control field" type="text">
    </div> 
    <div class="col-md-3">
        <div class="slideOne">
            <input type="checkbox" value="1" id="slideOne" name="check[]"  @if($task->finished == 1) checked @endif/>


        <label for="slideOne"></label>
            </div>
     </div>
     @endforeach
     /*The JS will add the new items here. JS example:*/
      <div class="col-md-9">
            <input id="taskfield" name="dynamic[]" value="{{ $task->name }}" class="form-control field" type="text">
      </div> 
      <div class="col-md-3">
            <div class="slideOne">
                <input type="checkbox" value="1" id="slideOne" name="check[]"  @if($task->finished == 1) checked @endif/>
                <label for="slideOne"></label>
            </div>
      </div>
</form>

为了动态保存它,我在我的控制器中使用它:

DB::table('tasks')->where('user_id', '=', $_POST['uid'])->where('week', '=', $_POST['week'])->where('year', '=', $_POST['year'])->delete();
if(isset($_POST['dynamic'])){
    $takenvdweek = $_POST['dynamic'];
    $finished = $_POST['check'];
    var_dump($finished);
    foreach($takenvdweek as $key => $value) {
        DB::insert('insert into tasks (name, finished, user_id, week, year) values (?, ?, ?, ?, ?)', array($value, $finished[$key], $_POST['uid'], $_POST['week'], $_POST['year']));    
    }
}

所以我的保存方法总是需要复选框的值,未选中时为 0,选中时为 1。我尝试使用带有 0 的隐藏字段,但它不起作用,因为 0 始终在 POST 数组中。此外,当我单击 a 标签时,第一个 foreach 标签正在更改,而不是我单击的第二个标签。我试图用一个类来解决这个问题,但没有成功。

编辑: foreach 用于存在的任务,但我也可以使用一块 op JS 添加新项目,它们也在表单内,所以我不能给它们一个 foreach-id。我用 JS 示例更新了我的问题。

【问题讨论】:

  • 我不确定您要达到什么目的,但首先您需要唯一的 ID。您处于 foreach 循环中,因此您可能希望将 foreach 键作为索引添加到 id,然后标签单击将起作用并选中/取消选中复选框。 (@foreach($tasks as $index => $task))
  • @KiwiJuicer 感谢您的回答,但是如何将它与 JS 动态字段一起使用?我不能给他们一个foreach id吗?我更新了我的问题。
  • 你可以尝试使用 Ajax

标签: php laravel checkbox dynamic


【解决方案1】:

尝试将任务id设置为动态并检查的索引

见下文

@foreach($tasks as $task)
<div class="col-md-9">
    <input id="taskfield" name="dynamic[$task->id]" value="{{ $task->name }}" class="form-control field" type="text">
</div> 
<div class="col-md-3">
    <div class="slideOne">
        <input type="checkbox" value="1" id="slideOne" name="check[$task->id]"  @if($task->finished == 1) checked @endif/>
        <label for="slideOne"></label>
    </div>
</div>
@endforeach

---编辑--- 如果任务 ID 不可用,那么您可以像下面这样设置索引

$index = 0;
@foreach($tasks as $task)
    <div class="col-md-9">
        <input id="taskfield" name="dynamic[$index]" value="{{ $task->name }}" class="form-control field" type="text">
    </div> 
    <div class="col-md-3">
        <div class="slideOne">
            <input type="checkbox" value="1" id="slideOne" name="check[$index]"  @if($task->finished == 1) checked @endif/>
            <label for="slideOne"></label>
        </div>
    </div>
$index++;
    @endforeach

【讨论】:

  • 感谢您的回答,但是如何将它与 JS 动态字段一起使用?我不能给他们一个 foreach/task id?
  • 如果任务 ID 不可用,那么您可以分配一个计数器作为索引。
【解决方案2】:

应该这样做:

@foreach($clubs as $club)
    <input type="checkbox"
           id="{{$club->getCode()}}"
           name="clubs[]"
           value="{{$club->getId()}}" /> {{$club->getName()}}<br>
@endforeach

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多