【问题标题】:Dynamically added form elements are not POSTED in IE 9动态添加的表单元素不在 IE 9 中发布
【发布时间】:2011-11-12 17:29:36
【问题描述】:

我有一个用于进行测试的表格。用户输入问题并提供问题类型和答案选项并保存问题。出了问题的是,当用户编写一个选项并单击添加到选项的按钮时,选项的文本框的内容被添加到 DOM 以显示为问题的答案。这一切都运行良好,直到 IE9 不存在。
当用户单击“添加到选项”按钮时,该选项显示在 DOM 中,但该值未在 IE9 中发布。
将 Option 添加到 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>    

在表单提交时,在顶部函数中,我没有得到隐藏值或输入类型文本字段的值。这适用于 FF 和 IE8。这玩意谁可以上?

注意:此代码在通过 IFRAME 包含的文件中运行。

【问题讨论】:

  • 我也有同样的问题:iframe 中的表单,使用 javascript 创建的字段没有发布。我确认在标题中添加 是可以的,但它很丑陋。有人找到另一种方法来解决这个问题吗?

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


【解决方案1】:

当我在 IE9 中测试您的代码时,它确实包含 POST 数据中的字段。

小提琴:http://jsfiddle.net/Guffa/AeBdd/

我根据脚本的需要重新创建了表单和字段。您应该检查您拥有的表单和字段是否有任何相关差异。

请注意,我必须将属性crt_question 添加到文档对象,因为不会自动添加带有该 ID 或名称的表单。您是否以 Quirks 模式呈现您的页面?这可能会导致一些问题。

【讨论】:

  • jsfiddle.net/AeBdd/1 在这里你可以找到一张大图。当用户添加IE9中没有发布的选项时
  • 这个问题完全是由于 IE9 标准。在兼容性视图中,错误已被删除。因此,如果有人遇到此类问题,只需在文档的头部添加以下行。
  • 这不是我可以推荐的解决方案。 IE9 肯定能够发布数据,正如我在上面所展示的。您应该验证您的代码并将其调整为您正在使用的文档类型。有些元素是 XHTML,有些是 HTML 4,而且你有一个重复的 id (test_ans_view)。
  • php 代码无法正常工作。有没有其他方法可以给你看代码。
【解决方案2】:

这个问题完全是由于 IE9 标准造成的。在兼容性视图中,错误已被删除。因此,如果有人遇到此类问题,只需在文档的头部添加以下行:&lt;meta http-equiv="X-UA-Compatible" content="IE=8" /&gt;

【讨论】:

    【解决方案3】:

    您可能有一些不正确的 HTML。例如,一种随机的可能性,它是这种症状的一种症状并且对我有用:尝试将您的 &lt;div&gt; 更改为 &lt;span&gt;

    我在使用innerHTML 将 HTML 数据插入 div 时遇到了同样的问题,但 IE9 无法识别它。即使我试图提醒它不知道它存在的字段值,即使它在 IE8、Chrome 等上运行良好。但我将 &lt;div&gt; 更改为 &lt;span&gt; 瞧,它完全理解。

    事实证明,我有一些不正确的 HTML 语法。具体来说,我的&lt;form&gt; 标签位于&lt;p&gt; 标签内。与所有其他浏览器不同,IE9 不会原谅这一点,并且仅当它们位于 p &gt; form &gt; span 而不是 p &gt; form &gt; div 时才理解我插入的元素。当然,真正的解决方案是纠正我的 HTML 结构。然后IE9理解了&lt;div&gt;&lt;span&gt;

    【讨论】:

      【解决方案4】:

      我刚刚遇到了同样的问题。仅在 ie9 中,动态加载的 AJAX 输入元素不会在提交时发布——onload 创建的输入会发布得很好。对我来说最终的问题是缺少一个开始的正文标签。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2011-11-06
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多