【问题标题】:Laravel form uses ajax just when checkbox is manually checked仅当手动选中复选框时,Laravel 表单才使用 ajax
【发布时间】:2016-10-07 17:10:28
【问题描述】:

我无法理解:

我有一个 Laravel 表单。在控制器中,我设置了表单可能通过 ajax 存储数据的考虑,并且我还为站点的另一部分放置了一个后备非 ajax,其中不使用 ajax:

public function store(Requests\EntryRequest $request) {

    $journal = new Article($request->all());
        if ( Request::ajax() ) {
            Auth::user()->articles()->save($journal);
            return response(['msg' => 'Daily entry saved', 'status' => 'success']);
        } else {
            Auth::user()->articles()->save($journal);
            return redirect('home')->with('message', 'Daily entry saved');
        }
   }

到目前为止一切顺利。我的表单包含一个复选框,还有一个隐藏的输入,以便在用户不触摸复选框时帮助通过表单发送值(如果选中了真正的复选框,我稍后会删除隐藏的值)

{!! Form::hidden('doctor', '0', ['type'=>'hidden', 'id'=>'drhelp'] ) !!}
{!! Form::checkbox('doctor', '1', false , ['class' => 'checkbox', 'data-toggle'=>'toggle', 'data-onstyle'=>'success', 'id'=>'drcheck']) !!}

表格是这样发送的,没什么特别的:

$.ajax({
      type: "POST",
      url: '/articles/',
      data: form.serialize(),
      success: function( msg ) {
          //do things after success
      }
});

我的问题:当我手动更改复选框时,为什么表单只能通过 Ajax 工作。例如,它打开时未选中,所以如果我想在未选中的情况下发布它,我必须选中它并再次取消选中它。如果我不碰它,表格只是通过常规提交。

然而,如果我与复选框交互,表单会通过 Ajax POST。这里有什么问题?

非常感谢

【问题讨论】:

  • 显示 JavaScript 的其余部分。
  • 我刚刚意识到问题出在哪里:复选框的 on change 事件的右括号被错误地放置在 ajax 调用之后......因此,ajax 仅在复选框被更改时才起作用。我不知道为什么会发生这样的情况,无论您在一个问题上花费了多少天,在发布第一个帮助请求后几分钟您才意识到解决方案......

标签: ajax laravel post


【解决方案1】:

我更好的处理方法是从迁移中为复选框添加默认值

$table->boolean('doctor')->default(false);

那么你不必添加隐藏输入,这就足够了

{!! Form::checkbox('doctor', true, false , ['class' => 'checkbox', 'data-toggle'=>'toggle', 'data-onstyle'=>'success', 'id'=>'drcheck']) !!}

【讨论】:

  • 谢谢,不错的方法。这是我使用 Laravel 的第一个项目,所以我不知道。我已经找到了问题,但我会接受你的回答,因为这是一个有用的技巧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
相关资源
最近更新 更多