разделение URL, приводящее к ошибке в Firefox - PullRequest
0 голосов
/ 03 августа 2011

Я пытаюсь реализовать передачу переменных с помощью 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 Ответ

1 голос
/ 03 августа 2011

Вы меняете итератор цикла в другом цикле, вызывая бесконечный цикл.

Изменить эту строку:

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, вы сделаете переменную локальной областью действия и решите весь этот беспорядок.

...