我正在构建一个laravel
-app,将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: 1
newsletter: on
接受条件但未选中“新闻通讯”复选框时,表单数据将返回:
conditions: 1
newsletter: undefined
有人可以告诉我我在做什么错吗?
编辑
我正在使用jquery / axios发送表单数据:
if ($('#contact input[name="newsletter"]:checked')) {
formData.append(
"newsletter",
$('#contact input[name="newsletter"]:checked').val()
);
} else {
formData.append(
"newsletter",
$('#contact input[name="newsletter"]').val()
);
}
答案 0 :(得分:1)
尝试一下:
if ($('#contact input[name="newsletter"]:checked')) {
formData.append(
"newsletter",
$('#contact input[name="newsletter"]:checked').val()
);
} else {
formData.append(
"newsletter",
"off"
);
}
因此它应该是服务器上的newsletter: off
。
P。 S.我建议对复选框使用布尔值。
答案 1 :(得分:1)
有人可以告诉我我在做什么错吗?
首先,您的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)) {
...
}