【问题标题】:Checkbox value not submitting复选框值未提交
【发布时间】:2014-06-26 20:15:52
【问题描述】:

编辑 表单和复选框在 Internet Explorer 8 中提交完全正常。在 IE 10 和 Chrome 34.0 中它不会被提交

好吧,这个让我难住了。我有一个表格,每个表格都包含一个测验问题,它的可能答案,以及一个用于选择正确答案的复选框。

<form action="/department/update_quiz_question/1/1/5" method="post" class="form-horizontal form-bordered form-row-stripped" id="question_form_5">
  <tr id="question_5">
    <td class="col-md-4">
      <textarea name="quiz_question" class="form-control" rows="4">What letter precedes B?</textarea>
    </td>

    <td class="col-md-5">
      <div class="input-group ">
        <input type="text" class="col-md-5 form-control" name="answer[]" value="A">
        <span class="input-group-addon">
          <input type="checkbox" checked="checked" name="correct_answer[]" value="A">
        </span>

        <span class="input-group-btn">
          <button class="btn red btn-delete-answer" type="button" data-question-id="5" data-answer="A"><i class="fa fa-trash-o"></i></button>
        </span>
      </div>
    </td>

    <td class="col-md-3">
      <a href="javascript:;" class="btn btn-sm blue btn-add-answer-existing" data-question-id="5">Add Answer</a> 
      <a href="javascript:;" class="btn btn-sm green btn-update-question" data-question-id="5">Update</a> 
      <a href="javascript:;" class="btn btn-sm red btn-delete-question" data-question-id="5">Delete</a>
    </td>
  </tr>
</form>

当我提交表单时,它会转到仅包含以下内容的 Codeigniter 方法:

print_r($_POST);
var_dump($this->input->post('correct_answer'));

如您所见,复选框肯定被选中。它也被目视检查(IE 框中有一个勾号)。

当我提交表单时,它会通过一个 jquery 检查脚本。如果全部通过,jquery 提交表单。

就在我提交表单之前,我使用以下命令记录选中的复选框的值:

console.log($(".input-group input[name^='correct_answer']:checked").val());

正如您所料,输出A,或任何一个打勾的答案。所以我确定该复选框已打勾。

但是,Codeigniter 会输出以下内容:

Array ( [quiz_question] => What letter precedes A? [answer] => Array ( [0] => A ) )
bool(false)

array 来自原始 $_POST 数据。 bool(false) 是从$this-&gt;input-&gt;post('correct_answer'); 输出的。

如您所见,correct_answer 的复选框值甚至没有显示在原始 $_POST 数据中。

我不明白我做错了什么。当我创建一个新问题时,我有一个相同的表格,而且效果很好。

任何人都可以看到任何明显的错误吗?还是我做错了什么? 非常感谢

编辑

这是我迄今为止尝试过的:

  • 删除复选框周围的所有 span 元素,只留下文本输入和复选框输入 - 帖子数据中仍然没有复选框值
  • 删除了复选框名称周围的方括号 - 没有发布数据
  • 重命名复选框名称,无帖子数据
  • 直接提交表单,而不是先通过 jquery 检查,没有发布数据
  • 将其从复选框更改为单选按钮 - 没有发布数据
  • 将其从复选框更改为文本, - 有效,当它是收音机或复选框时不起作用

【问题讨论】:

  • 为什么名称是正确的回答[]而不是正确的回答?
  • 我都试过了。最初它是正确的答案 [] 因为它是一个复选框,然后我删除了方括号来测试它,结果相同。即使我删除了方括号并将类型更改为无线电,它也不会被发布。但是,当我将类型检查为text 时,它会很好地提交。出于某种原因,复选框和单选没有提交
  • 您是否选中了复选框?从 PHP 端,您检查是否已检查 (isset($_POST['correct_answer']))。如果未发送 Post,则假定未选中。
  • 您的 HTML 代码无效 - 您不能将 form 元素作为 table 的子元素。将整个表格放入表单中,或者将整个表单放入td 元素中——这是您only 的两个选项。 (针对错误 HTML 的不同纠错算法很可能解释了为什么您看到当前代码在某个浏览器中工作,而在其他浏览器中却没有。)
  • @CBroe 就是这样!刚刚用 div 替换了表格,它工作得很好。我不敢相信!非常奇怪的行为,它只是未提交的复选框和收音机!如果您想将其发布为答案,我很乐意接受:) 非常感谢!

标签: php html codeigniter checkbox


【解决方案1】:

您的 HTML 代码无效 - 您不能将 form 元素作为 table 的子元素。

要么将整个表格放入表单中,要么将整个表单放入 td 元素中——这是您仅有的两个选择。¹

针对错误 HTML 的不同纠错算法最有可能解释了为什么您看到当前代码在某个浏览器中工作,而在其他浏览器中却没有。


¹好吧,如果您无论如何都想坚持使用表格 - 正如您在 cmets 中所说,放弃使用表格也解决了该结构问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 2017-08-18
    相关资源
    最近更新 更多