动态AJAX填充的表不起作用IE 8



嗨,我已经是IE8 ISSURE,这是代码:

html代码:

  <table id="myTable" border="1">

JavaScript函数:

function loadTableContent() {
$.ajax({
    type : 'GET',
    url : '/sohara/viewResults.do',
    contentType : 'application/json; charset=utf-8',
    success : function(response) {
        result = response;
        var html_Table = '';
        html_Table += '<tr><th bgcolor="silver">Type</th>
                    <th bgcolor="silver">Quantity A</th>
                    <th bgcolor="silver">Quantity B</th></tr>';
        for ( var i = 0; i < result.length; i++) {
            html_Table += '<tr>';
            html_Table += '<td>'+result[i].description+'</td>';
            html_Table += '<td>'+result[i].quantityA+'</td>';
            html_Table += '<td>'+result[i].quantityB+'</td>';
            html_Table += '</tr>';          
        }   
        html_Table += '</table>';
        $("#myTable").append(html_Table);
    },
    error : function(response) {
        alert("Error");
    }
});
}

在Firefox,Chrome和Opera中总是很完美,但在IE8中,桌子上没有显示任何内容。我该如何管理?

我不是100%发生的事情,而是某些可能性:

  • 您的<table>元素不完整,因为它没有结尾标签。我最初以为这仅仅是因为您很简洁,并且没有将其包括在示例中,但是后来我注意到您将</table>包括在JavaScript中。您需要在HTML中正常终止标签,例如:

    <table id="myTable" border="1"></table>

然后在JavaScript中使用它(并删除您附加JS中的结尾标签)

  • 此外,我认为HTML规格说该表标头行(例如您的TH标签)应包裹在<thead>元素中(例如<table><thead><tr><th>Header</th></tr></thead></table>,而车身元素则将其包裹在<tbody>元素中。即使没有这些浏览器,大多数浏览器也似乎很好,但我指出这是您问题的可能来源。

  • 最后一个潜在的问题是IE一直无法在桌子上设置InnerHTML。请参阅IE9 CreateElement并在设定操作上设置InnerHTML掉落标签?并且无法在IE中的tbody上进行Innerhtml,以获取更多信息。我不知道jQuery如何更新表数据。我认为,如果他们依靠这种方法,我们会在这里看到更多问题,但是谁知道。

工作解决方案:

根据马特(Matt),我以这种方式声明表:

<table id="myTable" border="1"></table> // FULL working method

实际上,如果我不关闭,则IE8会自动关闭HTML标签,从而在附加新的HTML代码中引起多个问题:

<table id="myTable" border="1"></> // NOT working method 

然后而不是使用:

$("#myTable).append(html_Table);

我使用:

$("#myTable).html(html_Table);

显然我必须从ajax删除:

html_Table += '</table>';

完整工作:)

最新更新