拆分url导致firefox出错

时间:2011-08-03 11:44:21

标签: javascript url split

我正在尝试使用公式之间的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>

1 个答案:

答案 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关键字,您将使变量具有局部范围并解决所有这些问题。