2012-11-26 36 views
0

我有一個代碼不僅在IE中工作。一切正常,在其他瀏覽器罰款,發生在IE瀏覽器的錯誤是這樣錯誤:函數預期Internet Explorer

Line: 11 
Error: Function expected 

這是小提琴,你可以複製粘貼,如你所願,我真的不知道該怎麼做。我不知道爲什麼它不會在所有 http://jsfiddle.net/laupkram/TDWd6/

工作代碼:

<form name="formx"> 
    <input type="text" name="txtMultiplier"> 
    <input type="button" value="LOOP!" onClick="loop()"> 
</form> 

<script> 
function loop(){ 
    var mynumbers = [0,1,2,3,4,5,6,7,8,9,10]; 
    var num = parseInt(document.formx.txtMultiplier.value); 

    document.write("Simulating For Loop<br>"); 
    for(var i = 0; i < mynumbers.length; i++){ 
     var prod = num * mynumbers[i]; 
     document.write(mynumbers[i].toString() + " x " + num.toString() + "=" + (prod).toString() + "<br>");  
    } 

    document.write("<br>"); 

    document.write("Simulating Do While<br>"); 
    var i = 0; 
    do{ 
     var prod = num * mynumbers[i]; 
     document.write(mynumbers[i].toString() + " x " + num.toString() + "=" + (prod).toString() + "<br>"); 
     i++;  
    }while(i < mynumbers.length); 

    document.write("<br>"); 

    document.write("Simulating While<br>"); 
    var i = 0; 
    while(i < mynumbers.length){ 
     var prod = num * mynumbers[i]; 
     document.write(mynumbers[i].toString() + " x " + num.toString() + "=" + (prod).toString() + "<br>"); 
     i++; 
    } 
} 
</script> 
​ 
+0

不要將您的代碼發佈到可能無法存活的地方,只要您的問題。在這裏發佈代碼,以便其他人可以受益。 – RobG

回答

1

不知道爲什麼,但loop接縫要像一些神奇的名字。根據this演示,單擊時循環不是功能。它是調用循環函數的<input type="button"/>元素的屬性。在onclickthis指向一個元素本身,循環是它的屬性,它等於1.這就是爲什麼它失敗,並帶有錯誤。可能的解決辦法:改變onclick="loop()"onclick="window.loop()"

例如,here它開始工作在IE,但document.write銷燬所有previouse DOM/JS和它首先document.write執行後停止執行。

這將是更好,如果你會使用類似下面的演示(結果存儲在臨時變量,它是下一個傳遞到innerHTMLres格): http://jsfiddle.net/TDWd6/5/

function loop1(){ 
    var mynumbers = [0,1,2,3,4,5,6,7,8,9,10]; 
    var num = parseInt(document.formx.txtMultiplier.value); 
    var res = "Simulating For Loop<br>"; 
    for(var i = 0; i < mynumbers.length; i++){ 
     var prod = num * mynumbers[i]; 
     res += mynumbers[i].toString() + " x " + num.toString() + "=" + (prod).toString() + "<br>"; 
    } 

    res += "<br>"; 

    res += "Simulating Do While<br>"; 
    var i = 0; 
    do{ 
     var prod = num * mynumbers[i]; 
     res += mynumbers[i].toString() + " x " + num.toString() + "=" + (prod).toString() + "<br>"; 
     i++;  
    }while(i < mynumbers.length); 

    res += "<br>"; 

    res += "Simulating While<br>"; 
    var i = 0; 
    while(i < mynumbers.length){ 
     var prod = num * mynumbers[i]; 
     res += mynumbers[i].toString() + " x " + num.toString() + "=" + (prod).toString() + "<br>"; 
     i++; 
    } 
    document.getElementById("res").innerHTML = res; 
} 

而且,由於某些原因,即使此代碼在IE中不起作用,當函數名稱爲loop(在代碼和演示中,它被稱爲loop1)。使用類似上面的代碼進行演示,但函數名爲loophttp://jsfiddle.net/TDWd6/5/

+0

這件事讓我愚蠢了近2個小時!!! ......循環詞只是問題所在。 IE JScript文檔中是否存在這個詞「循環」?無論如何謝謝你 –

+0

http://msdn.microsoft.com/en-US/library/ie/ms534134(v=vs.85).aspx –

1

我敢肯定,問題是document.write。當您銷燬文檔時,Internet Explorer不保留JavaScript(通過在DOM準備好後通過調用document.write隱式調用document.open),並且循環中調用的函數不再存在。

使用createElement/createTextNode/appendChild和朋友而不是document.write

0

這適用於ie9我的本地。但由於某種原因在jsfiddle上失敗。得愛IE。

<form name="formx"> 
    <input type="text" name="txtMultiplier"> 
    <input type="button" id="test" value="LOOP!" > 
</form> 

<script> 
document.getElementById('test').onclick = function(){ 
    loop(); 
}; 

function loop(){ 
    var mynumbers = [0,1,2,3,4,5,6,7,8,9,10]; 
    var num = parseInt(document.formx.txtMultiplier.value); 

    document.write("Simulating For Loop<br>"); 
    for(var i = 0; i < mynumbers.length; i++){ 
     var prod = num * mynumbers[i]; 
     document.write(mynumbers[i].toString() + " x " + num.toString() + "=" + (prod).toString() + "<br>");  
    } 

    document.write("<br>"); 

    document.write("Simulating Do While<br>"); 
    var i = 0; 
    do{ 
     var prod = num * mynumbers[i]; 
     document.write(mynumbers[i].toString() + " x " + num.toString() + "=" + (prod).toString() + "<br>"); 
     i++;  
    }while(i < mynumbers.length); 

    document.write("<br>"); 

    document.write("Simulating While<br>"); 
    var i = 0; 
    while(i < mynumbers.length){ 
     var prod = num * mynumbers[i]; 
     document.write(mynumbers[i].toString() + " x " + num.toString() + "=" + (prod).toString() + "<br>"); 
     i++; 
    } 
} 
</script>