-1

我有非常简单的 html 和 js 文件 - 我在下面包含了这些文件。

有趣(也令人沮丧)的是这些文件在 Safari 中工作 - 但在 Firefox 中,按下提交按钮会生成以下错误消息:

错误:sFeedback 未定义

源文件:javascript:sFeedback(); 线路:1

阅读其他帖子,如Firefox 中未定义的 JavaScript 函数?,似乎Firefox可能需要先定义函数才能调用它。如果是这种情况,有没有办法 - 在我的设置中 - 在调用之前定义函数?

测验.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

好吧,你遇到了一些奇怪的事情。

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 是与网页交互的唯一方式。在 20 多年左右的时间里并非如此。不要这样做。假装不存在。

于 2012-08-25T03:40:18.960 回答
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 回答