【问题标题】:JavaScript innerHTML is not working for IE?JavaScript innerHTML 不适用于 IE?
【发布时间】:2012-02-18 11:26:38
【问题描述】:

我正在使用 ajax 调用来为我的下拉列表带来列表并将其分配给 html,适用于 mozilla nad crome 但对于 IE,它显示一个空白下拉列表

var xmlhttp;

var strURL = "selectedu.php?selectward="+selectward;

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function(){
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        if(xmlhttp.responseText=="NOER")
        {
            alert("Select ER Type");
        }
        else
        {
            document.getElementById(id).innerHTML=xmlhttp.responseText;
        }   
    }
}
xmlhttp.open("GET",strURL,true);
xmlhttp.send();

【问题讨论】:

  • 您可以为此发布更多代码吗?如果可能的话试试jsfiddle.net
  • 您能否详细说明:哪个 tagName 是您的元素以及您如何创建和进行 XHR 调用?
  • ...在这里我们可以看到 *ers 在它们的自然栖息地。渴望代码的他们迅速涌现出新的问题,戳戳戳戳,直到提问者吐出最后一点脚本。

标签: javascript html xmlhttprequest


【解决方案1】:

innerHTML 属性在 IE 中尝试添加或更新表单元素时会出现一些问题,解决方法是创建一个 div 并在其上设置 innerHtml 属性,然后再附加到 DOM:

var newdiv = document.createElement("div");
newdiv.innerHTML = xmlhttp.responseText;
var container = document.getElementById(id);
container.appendChild(newdiv);

【讨论】:

    【解决方案2】:

    如果文档是 XHTML,IE 将不允许直接设置 innerHTML 属性。您需要将 responseText 解析为 DOM 元素,并用这些元素替换现有元素的内容。

    【讨论】:

      【解决方案3】:

      如果你使用 jQuery,你可以像这样使用append()

      $get('yourTargetObjectId').append('<p>this test to add</p>');
      

      append() 在被选元素的末尾插入内容,prepend() 在被选元素的开头插入。

      【讨论】: