我正在尝试使用公式之间的get来实现变量的传递,我基本上使用split()
方法来恢复每个页面上的变量。我遇到的问题是当我实现拆分时脚本停止了。
之前没有这样做,现在我添加了第二个函数来检查所有输入名称的所有值,我遇到了这个问题。我是javacsript的新手,所以我真的不知道在哪里寻找,除此之外,我真的需要能够获得变量的值。
以下是第一个表单和第二个表单的html,url.split("?");
导致firefox和我的计算机在此过程中丢失...
这是第一页:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
<link rel="stylesheet" type="text/css" href="style.css" />
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta name="robots" content="index, follow" />
<meta name="googlebot" content="index, follow" />
<script type="text/javascript">
<!--
// -->
</script>
</head>
<body>
<div>Choose between<br />
<form name="fo" method="get" action="part1.html">
<input type="radio" name="s1" value="1" />one<br />
<input type="radio" name="s2" value="2" />two<br />
<input type="radio" name="s3" value="3" />three<br />
<input type="submit" value="continuer" />
</form>
</div>
</body>
</html>
这里是part1.html页面,其中包含错误的脚本:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title></title>
<script type="text/javascript">
<!--
function gValue(varname) {
var url = window.location.href;
var qparts = url.split("?");
if (qparts.length == 0) {
return "";
}
var query = qparts[1];
var vars = query.split("&");
var value = "";
for (i=0;i<vars.length;i++) {
var parts = vars[i].split("=");
if (parts[0] == varname) {
value = parts[1];
break;
}
}
return value;
}
function subnewsc() {
for(i=1;i<=3;i++) {
var schck = "s" + i;
var score = gValue(schck);
score = parseInt(score);
i = parseInt(i);
var newscore = score+i;
var doc = "document.fo.s" + i;
doc.value=newscore;
}
}
// -->
</script>
</head>
<body onload="subnewsc();">
<div>choose between<br />
<form name="fo" method="get" action="part2.html">
<input type="radio" name="s1" value="1" />one again<br />
<input type="radio" name="s2" value="2" />two again<br />
<input type="radio" name="s3" value="3" />three again<br />
<input type="submit" value="continuer" />
</form>
</div>
</body>
</html>
答案 0 :(得分:1)
您正在更改其他循环中的循环迭代器,从而导致无限循环。
更改此行:
for (i=0;i<vars.length;i++) {
对此:
for (var i=0; i<vars.length; i++) {
你不会陷入无限循环。
需要一些解释..在函数subnewsc
中你有循环,使用i
作为循环迭代器。由于之前没有var
,它正在成为全局变量。现在在循环中你调用函数gValue
你也有循环,再次使用i
作为循环迭代器而没有var
它意味着使用相同的变量就像在第一个循环中一样。这当然会造成严重破坏。
例如,当您读取第二个查询字符串项的值时,i
在您调用var score = gValue(schck);
后的值为1,因此它永远不会超过3个。
通过添加var
关键字,您将使变量具有局部范围并解决所有这些问题。