2011-08-03 80 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

感謝你寶貴的答案和你對如何爲社區做貢獻的建議 –