在IE9中的每个循环中,jquery中的'undefined'

时间:2014-07-11 06:12:42

标签: javascript jquery

我尝试使用如下所示的jQuery动态创建表

 $.each(data, function (index, item) {
                rows = rows + '<tr>' + '<td style="width:20px" style="text-align: center;"><input type="radio" userid=' + item.UserId + ' checked="checked" name="SummaryTemplateRadio" id="savedSummaryTemplate' + item.SummaryTemplateSavedId + '"></td>' +
                    '<td class="tcol1" id="summaryTemplateName' + item.SummaryTemplateSavedId + '" style="text-align: left;">' + item.TemplateName + '</td>' +
                    '<td class="tcol2"  style="text-align: left;">' + item.CreationDate + '</td>' +
                    '<td class="tcol3" id="summaryTemplateDesc' + item.SummaryTemplateSavedId + '" style="text-align: left;">' + item.TemplateDescription + '</td>' +
                    '<td class="tcol4" style="text-align: left;">' + item.UserId + '</td>' +
                    '<td class="tcol5" style="text-align: left;">' + item.NoOfMeasures + '</td>' +

                    '</tr>';
            });
            $('.loadTemplatepopup .allTemplateTable tbody').html(rows);

问题是当它在IE9中运行时,&#39;未定义&#39;打印在下表中 enter image description here

undefined是因为,在jquery中,每个循环索引变量都是未定义的? IE10和其他浏览器工作正常。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

我将在这里猜测:问题不是index,而是rows

您的代码可能是:

var rows;
$.each(/**/)

将其更改为:

var rows = "";
$.each(/**/)

或类似的东西:

rows = (rows || "") + '<tr>..etc..</tr>';

答案 1 :(得分:1)

只需将行放入

即可
if (data.hasOwnProperty(index)) {
}

它将解决跨浏览器的问题。享受。

答案 2 :(得分:1)

The  issue is a very tricky one , Here it goes 

when you use "**$(array).each**" jquery clause in **IE** along with the iterator object array, it also returns the **prototype** of the array as an element ....which when tries to run the function nested in it,,,,,it breaks!

The solution would be to add a null check for the individual items in the iterator function. 

 $(myObjectArray).each(function (key, value) {
        if(typeof value !="undefined")
        someOtherCode(value.webName, value.webPath, value.libraryName);
    });