Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未选中HTML复选框值提交(PHP)_Javascript_Html_Forms - Fatal编程技术网

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)