动态添加的表单元素在IE 9中没有POSTED

时间:2011-09-08 06:33:21

标签: javascript cross-browser internet-explorer-9 dynamic

我有一个用于进行测试的表单。用户输入问题并提供问题类型和答案选项并保存问题。出现问题的是,当用户编写一个选项并单击“添加到选项”按钮时,“选项”文本框的内容将添加到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包含的文件中运行。

5 个答案:

答案 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)

同样的问题,问题是文档上缺少正文标记。