InnerHTML没有'我不在FF工作

InnerHTML doesn't work in FF?

本文关键字:FF 工作 没有 InnerHTML      更新时间:2023-09-26

我对Javascript和与web相关的基本内容都很陌生编码。我在FF中使用InnerHTML有一个简单的问题,希望你能帮帮我。

我使用的代码应该会生成一个简单的html输入行,在IE中,它运行良好(尽管当我加载它时,我会得到"我应该在顶部启用activeX消息(,但在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]+'"/>+arrNames[i]+'

';}siteBoxes+=";document.getElementById("mainDiv"(.innerHTML=站点框;

我确信这是一个简单的解决方案,我试着在网上搜索,但是我已经没有力气了,我希望你们这些善良的人可以帮我。

提前感谢!!!

好的,问题在于头中的数组定义我刚刚注意到,在FF的错误控制台中,我收到一条消息,说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

中则不然

我第一眼就注意到了一些事情。

<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从未声明过,至少从您提供给我们的代码中是这样。

适用于Opera、IE和FF。

尝试取消对输出的捕获;

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

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

您的代码的其余部分一定有问题,因为当我更改它时。它运行良好。

<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>

这里可能有一种更干净的实现方式(也可以参见代码中的注释(:

//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中这绝对是一个问题。因此,将字符串推到数组上,然后在最后加入它们会给你带来更好的性能。