0

我有一个不仅适用于 IE 的代码。在其他浏览器上一切正常,IE中发生的错误是这样的

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

3 回答 3

1

我很确定问题出在document.write. 当您销毁文档时,Internet Explorer 不会保留文档中的 JavaScript(通过在 DOM 准备好后调用隐式调用document.opendocument.write,并且您在循环中调用的函数不再存在。

使用createElement//createTextNodeappendChild朋友而不是document.write.

于 2012-11-26T11:40:55.860 回答
1

不知道为什么,但loop接缝就像一些神奇的名字。根据演示,单击时循环不是功能。它是<input type="button"/>元素的一个属性,它调用一个循环函数。Inonclick this指向一个元素本身,而循环是它的一个属性,等于 1。这就是它失败并出现错误的原因。可能的修复:更改onclick="loop()"onclick="window.loop()"

例如,这里它开始在 IE 中工作,但document.write销毁所有以前的 DOM/JS 并在第一次执行后停止document.write执行。

如果您将在下面的演示中使用类似的东西会更好(结果存储在下一个传递给div 的临时变量中): innerHTMLhttp : //jsfiddle.net/TDWd6/5/res

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

loop此外,由于某种原因,当函数名称为时(在上面的代码和演示中调用loop1),即使此代码在 IE 中也不起作用。请参阅上面的代码演示,但函数名为loop:http: //jsfiddle.net/TDWd6/5/

于 2012-11-26T12:00:13.570 回答
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>
于 2012-11-26T12:05:56.133 回答