我有一个用于进行测试的表单。用户输入问题并提供问题类型和答案选项并保存问题。出现问题的是,当用户编写一个选项并单击“添加到选项”按钮时,“选项”文本框的内容将添加到DOM中以显示为“问题”的答案。这一切都很好,直到IE9不存在。
当用户单击“添加到选项”按钮时,选项将显示在DOM中,但该值在IE9中不是POSTED。
将选项添加到DOM的功能是
var tbl = document.getElementById('tbl');
var lastRow = tbl.rows.length;
var iteration = lastRow;
var row = tbl.insertRow(lastRow);
arr[ind] = iteration;
var cellLeft1 = row.insertCell(0);
var cellLeft2 = row.insertCell(1);
var cellLeft3 = row.insertCell(2);
if(document.crt_question.test_ans_view[0].checked)
{
if(document.crt_question.test_ans_choice.value=="0") // MCQ with Single Answer (Radio Buttons)
{
var op_val=document.crt_question.test_answer.value;
var words=op_val.split("");
op_val='';
for(i=0;i<words.length;i++)
{
op_val = op_val + words[i].replace('"',"'");
}
cellLeft1.innerHTML = '<div id="button_div'+ind+'" class="dom_"><input type="radio" name="button_'+ind+'" id="button_'+ind+'" value="'+ind+'" ></div>';
cellLeft2.innerHTML = '|<input type="image" src="../../_images/view_del.gif" onclick="return removeRowFromTable('+ ind +')" />|';
var newOption = document.createElement("input");
newOption.name = "test_answer"+ind+"";
newOption.type = "hidden";
newOption.value = op_val;
var newOption2 = document.createElement("input");
newOption2.name = "view_option"+ind+"";
newOption2.type = "text";
newOption2.value = op_val;
cellLeft3.appendChild(newOption);
cellLeft3.appendChild(newOption2);
ind++;
remove++;
}
}
添加选项的表是
<table id="tbl" border="0" style="padding-left:70px;">
<tr>
<td align="left"></td>
<td align="left" ></td>
<td align="left"></td>
</tr>
</table>
在Top函数中,当表单为SUBMITTED时,我没有得到隐藏值或输入类型TEXT字段的值。这适用于FF和IE8。任何人都能得到这件事吗?
注意:此代码在通过IFRAME包含的文件中运行。
答案 0 :(得分:3)
该问题完全归功于IE9标准。在兼容性视图中,错误已被删除。因此,如果任何人遇到此类问题,只需在文档的主题部分添加以下行:<meta http-equiv="X-UA-Compatible" content="IE=8" />
答案 1 :(得分:2)
您可能有一些不正确的HTML。例如,一种随机的可能性,这是一种症状并且对我有用:尝试将<div>
更改为<span>
。
我在使用innerHTML
将HTML数据插入div时遇到了同样的问题,但是IE9没有识别它。即使我试图提醒字段值它也不知道它存在,即使它在IE8,Chrome等上工作正常但是我将<div>
更改为<span>
并且瞧,它理解了完美。
事实证明,我有一些不正确的HTML语法。具体来说,我的<form>
标记位于<p>
标记内。与所有其他浏览器不同,IE9没有原谅这一点,只有在p > form > span
而不是p > form > div
内部才能理解我插入的元素。当然,真正的解决方案是纠正我的HTML结构。然后,IE9了解<div>
以及<span>
。
答案 2 :(得分:1)
当我在IE9中测试你的代码时,它确实包含了POST数据中的字段。
小提琴:http://jsfiddle.net/Guffa/AeBdd/
我根据脚本需要重新创建了表单和字段。您应该检查您的表格和字段是否存在任何相关差异。
请注意,我必须向文档对象添加属性crt_question
,因为表单不会自动添加,无论是使用该ID还是名称。您是否以Quirks模式渲染页面?这可能会导致一些问题。
答案 3 :(得分:0)
我刚遇到同样的问题。只有ie9动态加载的AJAX输入元素没有在提交时发布 - onload创建的输入会很好地发布。最终导致问题的是缺少开口的身体标签。
答案 4 :(得分:0)
同样的问题,问题是文档上缺少正文标记。