所以基本上我的问题是我需要提交按钮弹出一个新窗口,其中包含分数和正确的答案。继承人我试图做什么,哪个不起作用: (正文代码):
<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”
答案 0 :(得分:2)
function results()
{
var i, total;
这将total
声明为局部变量,无法从其他窗口访问。您可以通过从var
语句中删除该部分来修复它(使其成为全局变量)(并且可选地在任何函数之外为变量添加新的var
语句)。
作为旁注,您应该使用<
和>
转义码来表示格式中的小于/大于符号。这样就不需要插入空格并使其更有效。
答案 1 :(得分:2)
我看到至少有两个问题:
total
,以便window.opener
可以访问它。score
,total
和所有其他变量将返回其初始状态。因此,您必须停止表单子项: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;
声明中删除总计?我认为它以这种方式创建了一个本地范围的变量。