-1

私は非常に単純なhtmlファイルとjsファイルを持っています-それらを以下に含めました。

興味深い(そしてイライラする)のは、これらのファイルがSafariで機能することですが、Firefoxでは、[送信]ボタンを押すと次のエラーメッセージが生成されます。

エラー:sFeedbackが定義されていません

ソースファイル:javascript:sFeedback(); ライン1

Firefoxで定義されていないJavaScript関数のような他の投稿を読んでいますか?、Firefoxを呼び出す前に、関数を定義する必要があるようです。この場合、呼び出しの前に関数を定義する方法はありますか?私の設定では?

quiz.html:

<!DOCTYPE html>
<html>
<head>
    <title>Math Quiz</title>
    <meta name="generator" content="BBEdit 9.6" />
</head>
<script language="JavaScript" src="generateQuizItem.js">
</script>

<body onLoad="javascript:sGenerateQuizItem();">


</body>
</html>

そしてjavascript:

var a0;
var a1;
var sum;
        
function sFeedback()
    {
    var answer = document.quiz_form.answer.value;
    document.write("answer = " + answer + "<br>");
    if (answer == sum)
        document.write("Right!<br>");
    else
        document.write("Wrong!<br>");
    }
    
function sGenerateQuizItem()
    {
    a0 = 20;
    a1 = 40;
    sum = a0 + a1;
    
    document.write("<form action=\"javascript:sFeedback();\" method=\"get\" name=\"quiz_form\">\n");
    document.write(a0 + " + " + a1 + " = ");
    document.write("<input name=\"answer\" id=\"answer\" type=\"text\" size=\"4\" maxlength=\"4\" /><br><br>\n");
    document.write("<button type=\"submit\" id=\"submit\">Submit</button>");
    document.write("</form>");
    }
4

2 に答える 2

1

スクリプト参照をドキュメントの先頭に配置してみてください。

<!DOCTYPE html>
<html>
<head>
    <title>Math Quiz</title>
    <script src="generateQuizItem.js"></script>
</head>
<body onLoad="sGenerateQuizItem();">

</body>
</html>
于 2012-08-24T19:53:33.007 に答える
1

さて、あなたはいくつかの奇妙なことが起こっています。

document.writeは、いつ呼び出すかによって動作が異なる、使用する奇妙なものです。ページの読み込み中に実行すると、出力がHTMLに挿入されます...

<p>Hello your name is:
<script>
  document.write("Somebody");
</script>
</p>

ただし、ページの読み込み後にdocument.writeを使用すると、現在のページがdocument.writeの出力に置き換えられます。大量の情報をデバッグまたはダンプするのに役立つ場合がありますが、それ以外の場合は役に立ちません。

したがって、document.writeを使用すると、コードの実行中に現在のページが破棄されます。ブラウザが異なれば、それも異なる方法で処理されます。しないでください。

ページを変更するためのはるかに優れた方法があります。フォームをベースHTMLに含めて非表示にし、後で必要になったときに表示します。

document.createElementとその仲間を使用して、実行時にデータを作成します。

私がinnerHTMLを嫌うのと同じくらい、それでもより良い選択でしょう。

TL:DRはるか昔、document.writeはWebページを操作する唯一の方法でした。20年以上は真実ではありません。しないでください。存在しないふりをします。

于 2012-08-25T03:40:18.960 に答える