2012-11-26 39 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>