2012-08-24 38 views
-1

我有非常簡單的html和js文件 - 我將其包含在下面。JavaScript功能在Safari中可用,但在Firefox中找不到

有趣(和令人沮喪的)是,這些文件在Safari工作 - 但在Firefox,按提交按鈕生成此錯誤消息:

​​

閱讀其他帖子一樣JavaScript function not defined in Firefox?,似乎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>"); 
    } 
+3

嘗試將腳本引用放入文檔的頭部。 – j08691

+0

確實,這應該解決這個問題。 – WhyNotHugo

+1

也刪除'language =「JavaScript」'。 –

回答

1

嘗試把你的文件頭中的腳本引用。

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

</body> 
</html> 
+0

謝謝。我可以看到這樣做更合理 - 並且應該解決問題。唉,它沒有,所以也許別的東西導致了問題。 – westsider

+2

稍等片刻,您的document.write語句將覆蓋您的初始頁面內容並刪除sFeedback()函數。爲什麼Safari在工作我不確定,但這是核心問題。 Document.write很少用,請嘗試使用innerHTML來改變頁面內容。 – j08691

+1

試試這個jsFiddle http://jsfiddle.net/BnVa2/ – j08691

1

好的,你有一些奇怪的事情發生。

document.write是一個很奇怪的東西,使用時的行爲有所不同,具體取決於何時調用它。如果它運行在頁面加載過程中,然後將插輸出到HTML ...

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

但是,如果使用文件撰寫頁面加載後即可將更換與當前頁document.write的輸出。有時用於調試或傾銷大量信息 - 對其他任何情況都無用。

因此,您使用document.write 會破壞代碼正在運行的當前頁面。不同的瀏覽器將以不同的方式處理。不要這樣做。

有很多更好的方法來修改頁面。從基礎HTML中包含表單並隱藏它 - 然後在需要時顯示它。

使用document.createElement和好友在運行時構建數據。

儘管我不喜歡innerHTML,即使將是一個更好的選擇。

TL:DR 很久以前,document.write是與網頁交互的唯一方式。在20多年的時間裏並非如此。不要這樣做。假裝它不存在。

相關問題