【发布时间】: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 仅在复选框被更改时才起作用。我不知道为什么会发生这样的情况,无论您在一个问题上花费了多少天,在发布第一个帮助请求后几分钟您才意识到解决方案......