Javascript 未选中HTML复选框值提交(PHP)
我真不敢相信这么简单的事情会引起这么头痛Javascript 未选中HTML复选框值提交(PHP),javascript,html,forms,Javascript,Html,Forms,我真不敢相信这么简单的事情会引起这么头痛 <input type='checkbox' name="phoneConsent" id="phoneConsent" value="1"> 如何指定未设置的复选框不应发布其值 php: 实际的HTML <div class = "form-group"> <label for="phoneConsent" class='checkbox-inline <?php echo ($th
<input type='checkbox' name="phoneConsent" id="phoneConsent" value="1">
如何指定未设置的复选框不应发布其值
php:
实际的HTML
<div class = "form-group">
<label for="phoneConsent" class='checkbox-inline <?php echo ($this_user[0]['subscription'] == 1 ? '' : 'disabledClass') ;?>'>
<input type='checkbox' name="phoneConsent" id="phoneConsent" value="1" <?php echo ($this_user[0]['phoneConsent'] == 1 ? ' checked ' : '') ;?> <?php echo ($this_user[0]['subscription'] == 1 ? '' : ' disabled ') ;?>>
Premium account holders: check this box to post your phone number to your teaching profile.
</label>
</div>
console.log表单输出
选中复选框
Object {country: "AI", chinese_name: "", phone: "+86 1", phoneConsent: "on", personal_submit: ""} teacher_account.js:130
复选框未选中
Object {country: "AI", chinese_name: "", phone: "+86 1", phoneConsent: "on", personal_submit: ""} teacher_account.js:130
代码终于起作用了。我非常感激。
更新jQuery:
$(this).find('[name]').each(function(index, value) {
var that = $(this);
if(that.is(':checkbox'))
{
if(that.is(':checked'))
{
var name = that.attr('name');
}
}
else
{
name = that.attr('name');
}
var value = that.val();
// load loaded variables into array
form_data[name] = value;
});
请尝试以下代码块:
<html>
<head>
<title></title>
</head>
<?
if(isset($_POST['phoneConsent'])){
echo $_POST['phoneConsent'];
}
?>
<body bgcolor="#FFFFFF">
<form method="post" action="test.php">
<input type='checkbox' name="phoneConsent" id="phoneConsent" value="1">
<input type="submit" />
</form>
</body>
</html>
我认为您在html的这一部分之外的其他地方遇到了问题。您检查的是值是否已设置,而不是值本身。它将被发送,无论它是否未经检查或不是我所记得的 改变
$phoneapprovement=(isset($\u POST['phoneapprovement']))?1 : 0;代码>
要if(设置($\u POST['phoneConsent']))$phoneConsent=$\u POST['phoneConsent'])='1'?1 : 0;代码>问题出在jQuery.ajax()
处理程序中。在“自然”表单提交中,复选框不会被发布,但您在自己收集表单数据后,通过ajax自己进行发布
在这方面:
// variables for data
$(this).find('[name]').each(function(index, value) {
var that = $(this),
name = that.attr('name'),
value = that.val();
// load loaded variables into array
form_data[name] = value;
});
您正在选择具有['name']
的所有内容,并在表单数据[]
该复选框既有名称也有值,因此无论是否选中该复选框,您都会将name:value对放入表单_数据中
之后,您立即执行以下操作:
$.ajax({
type: 'post',
url: ajaxURL,
data: form_data,
...(etc)
您将数据:form_data
作为帖子正文发送,其中包括复选框“phoneapprovement:1”对
为了避免这种情况,您必须更智能地处理控件,检查输入控件类型并发送复选框(或radiobutton)数据仅当控件被选中时
我刚刚将你的代码粘贴到我的服务器上,它就像一个咒语,你可以自己检查它,我只是不得不删除国家选择方法,因为我没有那个phpfunction@verdesrobert也许我们应该交换电脑,我准备把我的电脑扔出窗口;在您的php中查看您的receive@verdesrobert由于是AJAX,我将表单数据打印到控制台。我刚刚在上面添加了控制台输出:与您的服务器不同,在我的服务器上,每当我提交表单时,它都会显示复选框,无论是否选中,您使用的是哪个版本的jquery?在我的页面中,我使用了google最新的jquery版本,这可能会有很大的不同。我完全同意。你知道我如何只发送选中的输入吗?如果你浏览我发送的页面代码,你会发现这不是问题。你知道如何保持我为JS对象分配名称/值对的方法吗,但是现在能够处理多个复选框,它们是同一名称的一部分,“checkbox[]”?因为我给一个名字赋值,所以我只得到同一名字的最后一个复选框。
$(this).find('[name]').each(function(index, value) {
var that = $(this);
if(that.is(':checkbox'))
{
if(that.is(':checked'))
{
var name = that.attr('name');
}
}
else
{
name = that.attr('name');
}
var value = that.val();
// load loaded variables into array
form_data[name] = value;
});
<html>
<head>
<title></title>
</head>
<?
if(isset($_POST['phoneConsent'])){
echo $_POST['phoneConsent'];
}
?>
<body bgcolor="#FFFFFF">
<form method="post" action="test.php">
<input type='checkbox' name="phoneConsent" id="phoneConsent" value="1">
<input type="submit" />
</form>
</body>
</html>
// variables for data
$(this).find('[name]').each(function(index, value) {
var that = $(this),
name = that.attr('name'),
value = that.val();
// load loaded variables into array
form_data[name] = value;
});
$.ajax({
type: 'post',
url: ajaxURL,
data: form_data,
...(etc)