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は、ドキュメントを破棄したときに(DOMの準備ができた後に呼び出すことによって暗黙的に呼び出すことによって)JavaScriptをドキュメントから保持せずdocument.opendocument.writeループで呼び出す関数は存在しなくなります。

createElementの代わりに//createTextNodeappendChildfriendsを使用しdocument.writeます。

于 2012-11-26T11:40:55.860 に答える
1

理由はわかりませんが、loop魔法の名前のように見えます。このデモによると、ループはクリック時の機能ではありません。<input type="button"/>ループ関数を呼び出す要素のプロパティです。Inonclick thisは要素自体を指し、 loop は 1 に等しいそのプロパティです。そのため、エラーで失敗します。考えられる修正:onclick="loop()"に変更onclick="window.loop()"

たとえば、ここでは IE で動作を開始しますが、document.write以前の DOM/JS をすべて破棄し、最初のdocument.write実行後に実行を停止します。

以下のデモのようなものを使用する方が良いでしょう (結果は、次にdiv に渡される一時変数に格納されます) innerHTML: http://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;
}

また、何らかの理由で、関数名が の場合、このコードでも IE で動作しませんloop(上記のコードとデモでは と呼ばれloop1ます)。上記のようなコードでデモを参照してくださいloop

于 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 に答える