我有一个联系表格,其中包含一些字段,例如姓名、电子邮件、订阅。订阅是一组复选框(数组),允许用户同时选择多个选项。
重要的:
请注意,我打算在没有 javascript 的情况下使表单工作,因此我需要输入名称为“订阅 []”。只需看一下复选框的 HTML 代码,您就会明白我的意思。
完整的源代码(我的调试):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>AJAX Posting of checkbox array</title>
</head>
<body>
<form id="frm_contact" name="frm_contact" method="post" action="ajax_contact_us.php">
<label for="name">Name</label>
<input type="text" name="name" id="name" class="text" /><br />
<label for="email">Email</label>
<input type="text" name="email" id="email" class="text" /><br />
<label for="subscribe">Subscribe</label>
<input type="checkbox" class="subscribe" name="subscribe" value="email" id="subscribe_0" />Email
<input type="checkbox" class="subscribe" name="subscribe" value="sms" id="subscribe_1" />SMS
<br />
<input type="submit" name="sbt_send" id="sbt_send" value="Send" class="btn_submit" />
</form>
<div id="test"></div>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#sbt_send').click(function(e) {
$('#test').html();
var subscribe = new Array();
$(".subscribe:checked").each(function() {
subscribe.push($(this).val());
});
//Prepare data to be sent
var dataString = $('#frm_contact').serialize();
$.ajax({
type: "POST",
url: "ajax_contact_us11.php",
data: dataString,
dataType: 'json',
cache: false,
success: (function(response)
{
if(response.error == 0)
{
alert('yes');
}
else
{
//alert('no');
$('#test').html('');
$('#test').append( response.message['name'] + '<br />'+
response.message['email'] + '<br />'+
response.check );
}
})
});
e.preventDefault();
});
});
</script>
</body>
</html>
//ajax_contact_us11.php
<?php session_start();
$errors = array();
$str = '';
if( !isset( $_POST['name'] ) || trim( $_POST['name'] ) == '' )
{
$errors['name'] = 'Enter name';
}
if( !isset( $_POST['email'] ) || trim( $_POST['email'] ) == '' )
{
$errors['email'] = 'Enter email';
}
if( !isset( $_POST['subscribe'] ) || trim( $_POST['subscribe'] ) == '' )
{
$errors['subscribe'] = 'Check at least one checkbox';
$str = $errors['subscribe'];
}
else
{
$str = $_POST['subscribe'];
}
if(count($errors))
{
$error = 1;
$message = $errors;
}
else
{
$error = 0;
$message = "success";
}
print json_encode(array('error' => $error, 'message' => $message, 'check' => $str));
die();
?>
问题:
这里有2个问题。
如果我使用 subscribe[] 作为复选框输入名称,那么我无法获取复选框的任何值,即使它们都被选中或只选中其中一个。
如果我删除 [] 即仅使用“订阅”而不是“订阅 []”作为复选框的名称,那么即使选中了两个,我也只能检索复选框的一个值。
我假设如果使用“subscribe”而不是“subscribe[]”,解决这个问题会很容易,但我真的需要使用“subscribe[]”。当 JS 被禁用时,我可以使表单工作,但为了正确发布这两个值(如果两个复选框都被选中),我需要名称为“订阅 []”。
那么我如何检索复选框值并同时使用“订阅 []”作为名称?
请注意,我将一个冗长的表格简化为最基本的形式,例如清酒。我会在当前选项中添加更多复选框,以及一组具有其他名称的新复选框。因此,我会将这个问题的解决方案应用于我将添加到表单中的新输入集。
自从一天半以来,我一直在研究这个问题,尝试了 SO & Google 的许多解决方案,但不幸的是,没有任何帮助。
我感谢所有帮助。