InnerHTML在FF中不起作用?

时间:2011-09-27 17:26:08

标签: javascript html activex innerhtml

  

我是Javascript的新手,基本上与网络相关的一切   编码。我在FF中使用InnerHTML有一个简单的问题,我希望你能   帮助我。

     

我正在使用这段代码,应生成一个简单的html输入行,   在IE中它工作正常(虽然当我加载它我得到“我应该   在顶部启用activeX msg,但在FF中根本不起作用,我可以   看到它在页面上的来源,但它没有显示任何东西......

<div id="mainDiv"></div>

<script type="text/javascript">
    var siteBoxes = '<form action=HTMLPage.htm name="myform">';
    for (var i = 0; i < arr1.length; i++) {
        siteBoxes += '<INPUT TYPE="checkbox" id="box'+i+'"
     

VALUE = “ '+ ARR1 [I] +'”/&GT; '+ arrNames [I] +'

';       }       siteBoxes + ='';       的document.getElementById( “mainDiv”)的innerHTML = siteBoxes。

     

我确定这是一个简单的解决方案,我尝试在网上搜索,但是   我已经没力了,我希望你们中的任何一个人都很善良   可以帮助我。

     

提前致谢!!!

好的,问题在于头部的数组定义。 我只是注意到在FF的错误控制台中我得到一个msg,arr1是未定义的,但它是,我甚至尝试将它移动到正文并且它没有改变,仍然未定义......并且它在IE中工作。

它可能是数组定义的东西吗?它与IE和FF ???不同

var arr1 = new Array(
         "http://www.google.com",
         "http://www.yahoo.com",
         "http://www.cnet.com",
         "http://www.google.ar/search?q="
         );

再次,它在IE中运行良好,但在FF

中运行不佳

5 个答案:

答案 0 :(得分:1)

乍一看我注意到的事情。

<div id="mainDiv"></div>

<script type="text/javascript">
    var siteBoxes = '<form action="HTMLPage.htm" name="myform">';//put quotes around page
    for (var i = 0; i < arr1.length; i++) {
        siteBoxes += '<INPUT TYPE="checkbox" id="box'+i+'" VALUE="'+arr1[i]+'"\/> 
   &nbsp;'+arrNames[i]+'<br \/><br \/>';
}
siteBoxes += '<\/form>';
document.getElementById("mainDiv").innerHTML=siteBoxes;

arr1永远不会从你提交给我们的代码中声明。

答案 1 :(得分:0)

适用于Opera,IE和FF。

尝试取消输出;

    document.getElementById("mainDiv").innerHTML = unescape(siteBoxes);

答案 2 :(得分:0)

脚本标记中的结束引号有问题。如果我删除它并键入一个新代码,则代码可以正常工作。

答案 3 :(得分:0)

代码的其余部分一定存在问题,因为当我更改代码时。它工作正常。

<html>
<head>
</head>
<body>
<div id="mainDiv"></div>
<script type="text/javascript">
    var arr1 = new Array();
    var arrNames = new Array();
    arr1[0] = "test";
    arrNames[0] = "nameTest";
    var siteBoxes = '<form action=HTMLPage.htm name="myform">';
    for (var i = 0; i < arr1.length; i++) {
        siteBoxes += '<INPUT TYPE="checkbox" id="box'+i+'" VALUE="'+arr1[i]+'"/>     &nbsp;'+arrNames[i]+'<br /><br />';
}
siteBoxes += '</form>';
document.getElementById("mainDiv").innerHTML = siteBoxes;
</script>
</body>
</html>

答案 4 :(得分:0)

这可能是一种更简洁的实现方法(参见代码中的注释):

//You can use the simple way of creating an array, and instead of having two
//arrays that represent the names and urls, just make a single array of JSON
var sitesArray = [
    {siteName: "Google",siteUrl:"http://www.google.com"},
    {siteName: "Yahoo",siteUrl:"http://www.yahoo.com"},
    {siteName: "CNET",siteUrl:"http://www.cnet.com"},
    {siteName: "Google Search",siteUrl:"http://www.google.ar/search?q="}
];

//Create an ouput array where you'll compile your html
var outputArray = [];

//Now loop through sitesArray and push the strings onto the ouputArray 
for (var i=0,len=arr1.length;i < len;++i) {
     outputArray.push("<input type=\"checkbox\" id=\"box",i,"\" ",
                             "value="\",sitesArray[i].siteUrl,"\" />&nbsp",
                             sitesArray[i].siteName,"<br /><br />");
}

document.getElementById("mainDiv").innerHTML = outputArray.join("");

建议这一点的主要原因是字符串连接可能非常慢,特别是如果你有很多长字符串。它在Firefox中并不是一个大问题,但它肯定是IE中的一个问题。因此,将字符串推送到数组,然后在最后加入它们将为您提供更好的性能。