需要javascript测验帮助

时间:2011-01-16 09:58:50

标签: javascript html

所以基本上我的问题是我需要提交按钮弹出一个新窗口,其中包含分数和正确的答案。继承人我试图做什么,哪个不起作用: (正文代码):

<form id="textcont" name="htmltest" onSubmit="return checkAll() && results()">
<b>1) Τι σημαίνει HTML?</b><br>
<input type="radio" name="q1" value="a" onclick="score[1]=0">a) Home Tool Markup Language<br>
<input type="radio" name="q1" value="b" onclick="score[1]=0">b) Hyperlinks and Text Markup Language<br>
<input type="radio" name="q1" value="c" onclick="score[1]=1">c) Hyper Text Markup Language<br>

<b>2) Διάλεξε το σωστό HTML tag για την μεγαλύτερη επικεφαλίδα:</b><br>
<input type="radio" name="q2" value="a" onclick="score[2]=0">a) < h6 ><br>
<input type="radio" name="q2" value="b" onclick="score[2]=0">b) < head ><br>
<input type="radio" name="q2" value="c" onclick="score[2]=1">c) < h1 ><br>

<b>3) Ποιο είναι το σωστό HTML tag για line break?</b><br>
<input type="radio" name="q3" value="a" onclick="score[3]=0">a) < break ><br>
<input type="radio" name="q3" value="b" onclick="score[3]=0">b) < lb ><br>
<input type="radio" name="q3" value="c" onclick="score[3]=1">c) < br ><br>

<b>4) Διάλεξε το σωστό HTML tag για να κάνεις bold κάποια γράμματα:</b><br>
<input type="radio" name="q4" value="a" onclick="score[4]=0">a) < bold ><br>
<input type="radio" name="q4" value="b" onclick="score[4]=1">b) < b ><br>
<input type="radio" name="q4" value="c" onclick="score[4]=0">c) < text.bold ><br>

<b>5) Ποιος είναι ο σωστός τρόπος για να δημιουργήσετε έναν υπερσύνδεσμο;</b><br>
<input type="radio" name="q5" value="a" onclick="score[5]=0">a) < a url="http://www.unipi.gr">Unipi.gr < / a><br>
<input type="radio" name="q5" value="b" onclick="score[5]=1">b) < a href="http://www.unipi.gr">Unipi.gr< / a><br>
<input type="radio" name="q5" value="c" onclick="score[5]=0">c) < a >http://www.unipi.gr"< / a><br>

<b>6) Ποια απο τα παρακάτω HTML tag απευθύνονται όλα σε πίνακα?</b><br>
<input type="radio" name="q6" value="a" onclick="score[6]=0">a) < table >, < head >, < tfoot ><br>
<input type="radio" name="q6" value="b" onclick="score[6]=0">b) < table >, < tr >, < tt ><br>
<input type="radio" name="q6" value="c" onclick="score[6]=1">c) < table >, < tr> , < td ><br>

<input type="submit" value="Αξιολόγηση"> <input type="reset" value="Reset"><br><br>
</form>

javascript文件:

function checkAll()
{
    var oops = "";
    for ( var q = 1; q <= 6; ++q )
    {
        var rbs = document.htmltest["q" + q];
        var okay = false;
        for ( var r = 0; r < rbs.length; ++r )
        {
            if ( rbs[r].checked ) okay = true;
        }
        if ( ! okay ) oops += "," + q;
    }
    if ( oops != "" )
    {
        alert("Δεν απαντήσατε στις εξής ερωτήσεις: " + oops.substring(1) +"\n Παρακαλώ απαντήστε σε όλες τις ερωτήσεις.");
        return false;
    }
    return true;
}

var score = new Array;
function results()
{
var i, total;
total = 0;
for(i=1;i<=6;i++)
{
total += score[i];
}
window=window.open("resultshtml.html","answers","width=400px,height=700px");
}

和resultshtml.html文件:

<html>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-7">
<head>
    <title>html test results</title>
</head>
    <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
<body>
<script type="text/javascript">
var total = window.opener.total;
document.write(total);
</script>
</body>
</html>

不幸的是,最后一个窗口中的document.write返回“undefined”

3 个答案:

答案 0 :(得分:2)

function results()
{
var i, total;

这将total声明为局部变量,无法从其他窗口访问。您可以通过从var语句中删除该部分来修复它(使其成为全局变量)(并且可选地在任何函数之外为变量添加新的var语句)。

作为旁注,您应该使用&lt;&gt;转义码来表示格式中的小于/大于符号。这样就不需要插入空格并使其更有效。

答案 1 :(得分:2)

我看到至少有两个问题:

  • 您必须在全局范围内定义total,以便window.opener可以访问它。
  • 自提交表单以来,页面将重新加载,scoretotal和所有其他变量将返回其初始状态。因此,您必须停止表单子项:return false上的results

注意:

从无线电输入修改分数的方式并不好。您最好使用value属性来传达信息:

<input type="radio" name="q2" value="c" onclick="score[2]=1">...
vs
<input type="radio" name="q2" value="2,1">...

# iterate over selected inputs
var pair = selected_input.value.split(",")
var key = pair[0], value = pair[1];
score[key] = value;

最好将score定义为对象,然后使用(for key in score) { score[key] ... }

进行迭代

但无论如何,为什么不在父页面中运行JS代码?

new_window = window.open("resultshtml.html","answers","width=400px,height=700px");
new_window.document.write(total);

如果您希望此代码位于弹出窗口中,则在那里创建一个函数,并使用所需信息(在本例中为score)从父级调用它。在任何这些情况下,您都不会依赖是否重新加载父页面。

答案 2 :(得分:1)

尝试从var i, total;声明中删除总计?我认为它以这种方式创建了一个本地范围的变量。