2011-09-27 67 views
0

我很新的Javascript和basiclly所有涉及到网络 编码。我有一个简单的问题在FF中使用InnerHTML,我希望你能帮助我 。我使用这段代码,应该会生成一个简单的HTML输入行, ,并且在IE中它可以正常工作(尽管当我加载它时,我得到了“我应该在012x上启用activeX msg”),但是在FF它不会在所有的工作,我可以 看到它thorugh源页面上,但它并没有显示任何东西......InnerHTML在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”)。inner HTML = siteBoxes;

我敢肯定,这是一个简单的解决方案,我试图在网络上搜索,但 我跑出来的强度为的,我希望你们中的任何一种人 能帮助我。

在此先感谢!

好的,问题是数组定义在头部。 我刚刚注意到,在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

+0

你不会在视图源页面中看到JS生成的代码。这只显示服务器发送的内容。要查看生成的代码,你需要像Firebug这样的东西来检查页面的DOM。你是否检查过FF中的JS控制台,看看是否有错误被发现?任何JS错误都会杀死脚本。例如... arr1被定义在哪里?如果没有定义,FF将会有一个懦弱的配合并杀死剧本。 –

回答

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至少来自您向我们呈现的代码。

+0

您在数组元素之间有两个逗号,请尝试var arr1 = [“google.com”,“yahoo.com”]; –

0

适用于Opera,IE和FF。

尝试消除输出;

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

脚本标记中的结尾引号出现问题。如果我删除它并键入一个新的代码,则代码有效。

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> 
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中肯定是一个问题。因此,将字符串推送到数组上,然后在最后加入它们会使您获得更好的性能。

相关问题