修改 表单和复选框在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->input->post('correct_answer');
。
正如您所看到的,correct_answer
的复选框值甚至没有显示在原始$_POST
数据中。
我无法理解我做错了什么。当我创建一个新问题时,我有一个相同的形式,这完全正常。
任何人都可以看到任何明显的错误吗?或者我做错了什么? 非常感谢
修改
这是我迄今为止所尝试过的:
答案 0 :(得分:2)
您的HTML代码无效 - 您不能将form
元素作为table
的子代。
将整个表格放入表格中,或将整个表格放在td
元素中 - 这些是您唯一的两个选项.¹
针对错误HTML的不同纠错算法很可能解释了为什么您看到当前代码在某个浏览器中工作,而在其他浏览器中却没有。
¹好吧,如果你想坚持一张桌子 - 正如你在评论中所说的那样,离开使用桌子也解决了结构问题。