Javascript не может присвоить значение переменной и вызывает разрыв -> word5 = (ключевые слова [n] .length); - PullRequest
0 голосов
/ 10 сентября 2011

Выполнение некоторого самообучения javascript, и сама программа очень проста. Он ищет в вводе ключевые слова и, когда находит, помещает значения индекса в заполнители списка. (Я позже разработаю код для удаления повторений).

Однако загвоздка. Я пытаюсь сделать что-то очень простое. Все, что я делаю, это присваиваю переменную words5 ключевым словам [n] .length. Теперь я обнаружил, что ключевые слова [n] .length выводят правильное значение при вложении в document.write (). Я также обнаружил, что ключевые слова [n] также выводят правильное значение при вложении в document.write (). НО, если любой из них используется в коде за пределами document.write, это приводит к разрыву кода.

Занимался этим часами. И я не смог найти решение. Ребята, у вас есть какие-нибудь подсказки? Код, который я использовал для тестирования, закомментирован.

<html>
<body>

<script type="text/javascript">


function separate()
{
    contents = document.myForm.event.value;
    placeholders = [32342423, 253234523];
    keywords = [" in ", " at ", " on ", " for "];

    for(n=0;n<=keywords.length;n++)
    {
        for (i=0;i<=contents.length;i++)
        {
            //document.write(i,"+", i+keywords[n].length, keywords[n])
            //document.write(keywords[n].length)
            word5 = (keywords[n].length);
            //document.write(" " + contents.slice(i,i+word5) + " ")
            //if (contents.slice(i,i+4) == " at ")
            //if (contents.slice(i,i+wordlength) == " at ")
            //if (contents.slice(i,i+4) == keywords[n])
            if (contents.slice(i,i+word5) == keywords[n])
            {
                placeholders.push(i);
            }
        }
    }
    document.getElementById("sliced").innerHTML = placeholders;
    printer();
}


function printer()
{
    contents = document.myForm.event.value;
    document.getElementById("MSG").innerHTML = contents;
}
</script>



<form name="myForm" method="post">
Add Event: <input type="text" name="event" value="Whatever at hello at crazy" /><br />
<input type=button value="Submit" onClick="separate()" />
</form>

<SPAN ID="sliced">&nbsp;</SPAN>
<p></p>
<SPAN ID="MSG">&nbsp;</SPAN>



</body>
</html>

Любая помощь очень ценится. Спасители действительно =)

Ответы [ 2 ]

3 голосов
/ 10 сентября 2011

Когда я запускаю ваш код, я получаю следующее:

wordlength is undefined

Это приводит к сбою кода. Где вы определяете wordlength?

Обновление

Также имейте в виду, что когда вы просматриваете массивы, эти массивы имеют нулевой индекс. То есть первый элемент в массиве - это элемент 0. Количество элементов в массиве всегда будет больше суммы индексов (сумма индекса + 1).

Это в основном означает, что когда вы используете оператор <= (меньше или равно) в цикле for, вы выполняете цикл от нуля до количества элементов в вашей коллекции, так как индекс массива начинается с ноль, вы в конечном итоге будете запрашивать элемент из вашего массива, который не существует.

Чтобы убедиться, что вы перебираете только доступные элементы, используйте оператор < вместо <=.

1 голос
/ 10 сентября 2011

это не то, что нарушает ваш код, похоже, что вы нигде не определяете переменную «длина слова» в своем коде, это то, что нарушает ваш код.

word5 = (ключевые слова [n] .length) на самом деле работает.

Также я бы порекомендовал получить аддон "firebug" для firefox, это лучший способ для отладки любого javascipt или html кодаконсоль для вывода ваших отладочных операторов, используя «console.log (myvar)» вместо document.write, что является довольно старомодным способом выполнения действий.

Дайте мне знать, если это решение не работает для вас:)

РЕДАКТИРОВАТЬ: я сделал еще один набор тестов и выяснил, в чем причина, ваш первый цикл работает на 1 больше, чем ваше текущее число массивов, поэтому вместо того, чтобы сделать его "меньше или равнотоже "это должно быть просто меньше:

for(n=0;n<keywords.length;n++)

Следовательно, почему вы получаете ключевое слово [n] не определено, так как в массиве нет ключевых слов [4]

...