LINUX.ORG.RU

JS. Тепняк.

 , , понедельник каждый день,


0

1

Код:
[code]
console.log( filds.serializeArray() );
var filds_arr = filds.serializeArray() ;
console.log(filds_arr);
[/code]

Первая строка печатает в консоль
[code]
Array [ Object, Object ]
[/code]

третья печатает:
[code]
Array [ ]
[/code]

Почему тот-же самый метод вызванный у того-же самого объекта возвращает другой результат если этот результат пытаться присвоить переменной?
Почему? Как такое вообще может быть? Это какая-то особая магия JS, или я второй чай не могу найти очевидную ошибку в своём коде?

★★★★★
Ответ на: комментарий от MrClon

На jquery.com пишут:

The .serializeArray() method uses the standard W3C rules for successful controls to determine which elements it should include; in particular the element cannot be disabled and must contain a name attribute.

Твои элементы не содержат имени или не являются стандартными контролами.

jesseydesu
()
Ответ на: комментарий от abs

Думал, но она этого не делает. Если добавить в конец ещё один один console.log( filds.serializeArray() ); то он вернёт то-же что и в первый раз.
Ну и с одним вызовом filds.serializeArray() то-же самое, приведённая выше конструкция возникла только в процессе отлова этого бага.

MrClon ★★★★★
() автор топика

Зависит от множества факторов. Например, filds может отдавать данные ровно один раз. Поменяй местами строки и ещё раз попробуй.

x3al ★★★★★
()
Ответ на: комментарий от jesseydesu

Почему при вызове serializeArray внутри console.log объект filds содержит нужные элементы, а при вызове с целью присвоения результатов переменной уже не содержит?
Проблема не в том что serializeArray не делает того что я от него хочу. проблема в том что его поведение меняется в зависимости от фазы луны.

MrClon ★★★★★
() автор топика
Ответ на: комментарий от x3al

Логичное предположение, но посмотри постом выше.

MrClon ★★★★★
() автор топика

Вот когда у меня в IE8 код работал только при открытой консоли, тоже было весело.

amomymous ★★★
()

у того-же самого объекта

И, кстати, это, скорей вссего не «тот же самый». Проверт вот так:

console.log(filds.serializeArray()===finds.serializeArray()); 

J-yes-sir
()
Ответ на: комментарий от J-yes-sir

Да. Похоже на то.
Заменил:
console.log(filds_arr);
на:
console.log(filds_arr);
console.log(filds_arr.length);

Выводит:
Array [ ]
2

Пустой массив длинной в два элемента, блин.

MrClon ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

Английские граммернацы взумавшие коматься в моём коде-сугубо-для-личных-нужд должны страдать.

MrClon ★★★★★
() автор топика
Ответ на: комментарий от MrClon

Пустой массив длинной в два элемента, блин.

Это нормально. Можно создать массив, обычным образом

alert(new Array(10).length)
//  10
Он не пустой, он содержит 10 пустых мест, в отличии от new Array() или []

J-yes-sir
()
Ответ на: комментарий от J-yes-sir

Пустые элементы это более-менее понятно. Кстати такой массив отображается как «Array [ <10 пустых слотов> ]» в консоли, или как ",,,,,,,,," в алерте. Это приемлемо.
но в моём случае массив не пустой, в нём два непустых элемента (можно обратиться к ним по индексу, всё чинно-благородно), а в консолиэто отображается как пустой массив.

В общем проблема решена. Спасибо.

MrClon ★★★★★
() автор топика
Ответ на: комментарий от abs

Выяснил что проблемы нет. В обоих случаях возвращается массив из двух элементов, но во втором случае он неправильно выводится на консоль.
Решение: смириться с тем что средство отладки само требует отладки и не может считаться полностью доверенным источником информации.

JS. Тепняк. (комментарий)
JS. Тепняк. (комментарий)

MrClon ★★★★★
() автор топика
Последнее исправление: MrClon (всего исправлений: 1)
Ответ на: комментарий от MrClon

Некоторые консоли объединяют повторяющиеся сообщения. По ходу какой-то странный косяк.

Попробуйте между ними воткнуть console.log('----------------');

Vit ★★★★★
()
Ответ на: комментарий от Vit

Не думаю что тут такой случай. На каждый вызов console.log печатается одна строка, console.log вызывается дважды, выводится две строки, разных, не пустых.

MrClon ★★★★★
() автор топика

Так работает console.log, он показывает состояние не в момент вызова. Можешь в JSONе выхлоп делать.

Kalashnikov ★★★
()
Ответ на: комментарий от anonymous

JS часть я уже дописал и перешёл к бекэнду, не хочется возвращаться к JS. Хочется забыть этот JS как страшный сон.

MrClon ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.