Ошибка Uncaught TypeError: Cannot read property 'elements' of undefined
Пытаюсь собрать данные большой формы, с помощью кода, которым поделился программер, но все время получаю странную ошибку. Chrome выдает такой текст:
Uncaught TypeError: Cannot read property 'elements' of undefined Сам код:
var str = '';
for(i=0; i < document.parametry.elements.length; i++)
{
str += document.parametry.elements[i].name + '=' + encodeURIComponent(document.parametry.elements[i].value) + '&';
}
str = str.substring(0, str.length-1);
alert(str);
При этом, когда ввожу в консоли Chrome это: document.parametry.elements.length Получаю ответ - число 7. Подскажите, в чем может быть проблема? Почему страница не работает, а консоль того же браузера прекрасно определяет значение переменной? |
Allality, скорее всего какого-либо атрибута (name, value) не существует у какого-то элемента формы...
проверяйте на существование атрибутов... |
Цитата:
|
Цитата:
<form name="parametry"> <input name="aaa" value="10" /> </form> Та же ошибка... |
vadim5june, это имя формы, по всей видимости...
|
Allality,
<form name="parametry">
<input name="aaa" value="10" />
</form>
<script>
var str = '';
for(i=0; i < document.parametry.elements.length; i++)
{
str += document.parametry.elements[i].name + '=' + encodeURIComponent(document.parametry.elements[i].value) + (i == document.parametry.elements.length -1 ? '' : '&');
}
alert(str);
</script>
|
Скопировал ваш текст, работает. Выношу <script> часть в <head> документа - опять получаю ошибку... :blink:
|
Allality, либо заворачивайте в функцию, либо размещайте после определения самой формы, т.к. на момент вызова (document.parametry.elements.length) не существует вашей формы parametry
|
Цитата:
|
window.onload=function(){}
|
Цитата:
В общем запихнул в функцию - работает, но только со статической формой. Подскажите, как изменить (и вообще, возможно ли) код, чтобы он работал с формой, подгружаемой через Ajax? Я не знаком с тем как именно JS обрабатывает данные, но теоретически ведь должен быть способен обрабатывать данные из загруженной через Ajax формы. |
Цитата:
document.parametry на или document.forms[0] или function dd(p){ document.getElementsByName(p)[0]}; и вызывать dd("parametry"); |
Цитата:
Осталась одна проблемка, над которой завис. Дело в том, что в форме есть несколько SELECT MULTIPLE (где можно выбрать несколько значений сразу) и когда вызываю скрипт, передается только первое значение. Например, если выбраны 3, 4 и 7, показывает только 3. Посмотрел document.parametry.elements[1].value - пишет 3, причем: document.parametry.elements[1].value[1] document.parametry.elements[1].value[2] document.parametry.elements[1].value[3] все они undefined Я так понимаю тут два пути - либо сразу передать массив, если это возможно через GET, либо ввести проверку с помощью if создать список значений массива в строку (например "3i4i7"), чтобы передать дальше через GET. Но вопрос в том, где взять этот массив с данными, если в value висит только одно значение 3? |
Allality,
var mas = [];
for (i = 0; i < mySelect.options.length; i++) {
if (mySelect.options[i].selected)
mas[mas.length] = mySelect.options[i].value;
}
|
Цитата:
|
| Часовой пояс GMT +3, время: 02:40. |