2011-08-03 36 views
0

我想ot实现变量之间的传递与获取之间的公式,我基本上使用split()方法来恢复每个页面上的变量。我遇到的问题是当我执行分割时脚本停止。分裂URL导致Firefox的bug

它并没有这么做,现在我添加了第二个函数来检查所有输入名称的所有值,我得到这个问题。我是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

你正在改变在其他循环的循环迭代,从而导致无限循环。

改变这一行:

for (i=0;i<vars.length;i++) { 

要这样:

for (var i=0; i<vars.length; i++) { 

而且你不会陷入无限循环。

需要一些解释..在函数subnewsc中有循环,使用i作为循环迭代器。由于您以前没有var,它已成为全局变量。现在在该循环内,您可以调用函数gValue,在该函数中您也有循环,再次使用i作为循环迭代器,而不使用var,这意味着使用与第一个循环中的变量相同。这当然会造成严重破坏。

例如,当你读第二查询字符串项的值,i将有1值调用var score = gValue(schck);后,因此永远不会超过3个。

通过添加var关键字,你会做变量具有局部范围并解决所有这些混乱。

+0

非常感谢你,解决了这个问题并给出了明确的解释 –

+0

感谢你宝贵的答案和你对如何为社区做贡献的建议 –