我正在构建一个laravel连接mailchimp到联系表单的应用程序。用户必须接受条件,并有可能通过选中复选框来接收时事通讯。现在,当用户同时接受条件和时事通讯时,表单提交成功,但是当用户不选中时事通讯复选框时,表单未提交,我真的不知道为什么。这里的输入<input name="conditions" value="1" type="checkbox" class="custom-control-input" id="applyConditions" required><input type="checkbox" name="newsletter" class="custom-control-input" id="contactNewsletterSubscribe">和我的控制器:class ContactController extends Controller{public function store(){ $validator = Validator::make(request()->all(), [ 'email' => ['required', 'email'], 'name' => ['required', 'string'], 'phone' => ['string'], 'subject' => ['required', 'string'], 'message' => ['required', 'string'], 'conditions' => ['accepted', 'boolean'], ]); if ($validator->fails()) { return response() ->json($validator->messages(), 400); } if (request()->has('newsletter')) { Newsletter::subscribePending(request()->email); if (!Newsletter::lastActionSucceeded()) { return response() ->json($validator->messages(), 400); } } Mail::to('my@mail.com') ->send(new ContactUsMessage([ 'email' => request()->email, 'name' => request()->name, 'phone' => request()->phone, 'subject' => request()->subject, 'message' => request()->message, ])); return response()->json('OK', 200);}}当我同时选中conditions和newsletter复选框时,表单数据返回:conditions: 1newsletter: on当条件被接受但通讯复选框未被选中时,表单数据返回:conditions: 1newsletter: undefined有人能告诉我我做错了什么吗?
2 回答
慕雪6442864
TA贡献1812条经验 获得超5个赞
有人能告诉我我做错了什么吗?
首先,你的 jQuery 代码用处不大:
if ($('#contact input[name="newsletter"]:checked')) {
formData.append(
"newsletter",
$('#contact input[name="newsletter"]:checked').val()
);
} else {
formData.append(
"newsletter",
$('#contact input[name="newsletter"]').val()
);
}
在这两种情况下,您都试图获取value不存在的属性。并且您得到的on只是因为On当<input>标签没有value属性时,将值分配给选中的复选框是浏览器的默认行为。
此外,如果您设置该属性,则无论checked复选框的状态如何,您都将始终获得其值;)。自己试试看。
接下来,我将使用一个简单的代码,如下所示:
formData.append(
"newsletter",
$('#contact input[name="newsletter"]:checked').length
);
没有任何条件。在控制器中,您将获得1要么0。
然后,在控制器中,您可以这样做:
if (!empty(request()->newsletter)) {
...
}
- 2 回答
- 0 关注
- 189 浏览
添加回答
举报
0/150
提交
取消