Jquery each - всегда ли значения индекса начинаются с 0? - PullRequest
2 голосов
/ 14 октября 2010

У меня есть ложная проблема, которая, кажется, указывает на значение индекса, полученное из jquery, каждый метод не всегда начинается с 0.

Мой JavaScript выглядит примерно так:

$("#mylist").each(function(index) {
    var obj = new myclass();
    obj.property = "whatever";
    obj.sequence = index + 1;
    parentobj.list.push(obj);
});

Все это упаковывается в json и ajaxed (прошу прощения об использовании глагола) обратно на сервер.Затем сервер десериализует json в объекты .net.В этот момент я получаю сообщение об ошибке:

The value '91111' cannot be parsed as the type 'Int16'. 

В этот момент он пытается вставить значение последовательности в короткое поле.

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

Там также, кажется, странный образец значений.Значения в журнале: 61111, 81111, 91111, 111111, 211111, 311111. Они не поднимаются, не спускаются, а иногда и повторяются.

Может кто-нибудь пролить свет на это или подтвердить, что я не могу доверять индексуначать с нуля?

Спасибо

1 Ответ

2 голосов
/ 14 октября 2010

Как указано в jquery API для .each ():

Каждый раз, когда выполняется обратный вызов, передается текущая итерация цикла, начиная с 0

Поэтому я предполагаю, что он всегда индексируется как 0. У меня были странные проблемы с jQuery, который рассматривал операцию int + 1 как конкатенацию строк (которая могла объяснить цифру, сопровождаемую последними в ваших ошибках).Например, посмотрите на следующий код:

var a = 1;
var b = a + 1;

С кодом, подобным этому, я бы получил 11. Решение состоит в том, чтобы обернуть a в parseInt (), как это:

var a = 1;
var b =  parseInt(a) + 1;

Попробуйте изменить код следующим образом и посмотрите, что произойдет:

$("#mylist").each(function(index) {
    var obj = new myclass();
    obj.property = "whatever";
    obj.sequence = parseInt(index) + 1;
    parentobj.list.push(obj);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...