Jquery, функция $ .each () возвращает ошибку в IE. 'Длина' равна нулю или не является объектом - PullRequest
1 голос
/ 04 февраля 2010

Мой код работает нормально в FireFox, но мои пользователи ограничены IE. Я получаю сообщение об ошибке в IE, связанное с моей функцией JQUERY.

 populateTable:function(returnList) {


     var self = this;
     var eat = $.evalJSON(returnList.firstChild.textContent)
     $.each(eat,function() {


$("<tr><td>" + this.reportId + "</td><td>" + this.description + "</td><td>" + 
this.drawingNumber + "<td></tr>").insertAfter(self.tblResults[0].childNodes[1]);

 })


}

IE ошибается в $ .each с сообщением ниже:

'Длина' равна нулю или нет объекта

Есть идеи или может быть обходной путь для функции $ .each?

Обновление: returnList - это объект документа XML из вызова Ajax. Я пытаюсь получить строку объекта JSON, расположенную в теге XML.

Ответы [ 4 ]

3 голосов
/ 05 февраля 2010

Ваша проблема, вероятно, заключается в этой строке

returnList.firstChild.textContent

Поскольку returnList является объектом DOM XML, Internet Explorer просматривает и получает доступ к содержимому, отличному от остального реального мира (например, FF и т. Д.). Итак, я бы добавил еще jQuery, чтобы сделать работу за вас.

$(returnList).find('string').text();

Это должно вернуть вам строку JSON в во всех браузерах, поддерживаемых jQuery .

Кроме того, если вы пытаетесь вставить строку, вы делаете это странным образом. Предполагая, что self.tblResults [0] - это объект DOM таблицы, к которому вы хотите добавить строку, попробуйте следующее:

$(self.tblResults[0]).append("<tr><td>" + this.reportId + "</td><td>" + this.description + "</td><td>" + this.drawingNumber + "</td></tr>");
1 голос
/ 04 августа 2011

У меня была такая же проблема при использовании jquery 1.6.2. Я изменил в jquery (свернутая версия) метод each, чтобы обойти его, пока они не исправят ошибку (Ticket # 9974), и он отлично работает для меня.

В char 12361 на jquery-1.6.2.min.js я добавил это условие: if(!a)return;

Итак, код этого символа выглядит так:

each:function(a,c,d){if(!a)return;var f,g=0,h=a.length,i=h===b||e.isFunction(a);

вместо:

each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 05 февраля 2010

Если tblResult - таблица, у нее будет только один дочерний узел, <tbody> в IE (по крайней мере, иногда я не знаю, так ли это всегда).

0 голосов
/ 05 февраля 2010

В вашем последнем закрывающем теге "td" отсутствует косая черта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...