2011-09-27 65 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中肯定是一個問題。因此,將字符串推送到數組上,然後在最後加入它們會使您獲得更好的性能。

相關問題