-1

我正在开发一个Dashboard项目,其中的一个组件显示仪表盘上“缩小”窗口内的摘要表,其中用户输入的查询参数用于生成特定报告。Internet Explorer不兼容性v9和v8 [对象对象]〜其他

代码在Chrome,Firefox,Internet Explorer 11和10,Microsoft Edge中完美呈现,这里是正确呈现内容的示例。

Correctly Rendered

不过,我的一些客户仍在使用Internet Explorer 9和8,我必须用代码兼容支持他们,并与这些版本,我有问题,如下面的例子显示的。

Incorrectly Rendered

所以,可以看到,对于每个用户输入对象,由于某种原因[对象的对象]在上面的汇总表被显示。

用户输入变量存储作为隐藏标记,例如低于

Hidden Input Variables

的过程如下

1)I通过将存储的输入变量来填充该表服务器并返回一个带有结果的JSON对象

$.getJSON('/analyticsdashboard/SysoutSearch/GetSysout?' + $('#hdnParameters').val().slice($('#hdnParameters').val().indexOf('?') + 1)).done(function (result) { 
      var tbl = $("#tbl"); 
      var tbody = $('#tbl>tbody'); 

2)然后我'去掉'出变量到特定对象

var jobName = getURLParameterForHtml('jobName', $('#hdnParameters').val()); 
      var startDate = getURLParameterForHtml('startDate', $('#hdnParameters').val()); 
      var startTime = getURLParameterForHtml('startTime', $('#hdnParameters').val()); 
      var endDate = getURLParameterForHtml('endDate', $('#hdnParameters').val()); 
      var endTime = getURLParameterForHtml('endTime', $('#hdnParameters').val()); 
      var lastxDays = getURLParameterForHtml('lastxDays', $('#hdnParameters').val()); 
      var tableName = getURLParameterForHtml('tableName', $('#hdnParameters').val()); 
      var groupName = getURLParameterForHtml('groupName', $('#hdnParameters').val()); 
      var applicationName = getURLParameterForHtml('applicationName', $('#hdnParameters').val()); 
      var memberName = getURLParameterForHtml('memberName', $('#hdnParameters').val()); 
      var owner = getURLParameterForHtml('owner', $('#hdnParameters').val()); 
      var nodeId = getURLParameterForHtml('nodeId', $('#hdnParameters').val()); 
      var endStatus = getURLParameterForHtml('endStatus', $('#hdnParameters').val()); 
      var serverName = getURLParameterForHtml('serverName', $('#hdnParameters').val()); 
      var orderId = getURLParameterForHtml('orderId', $('#hdnParameters').val()); 

下面

var getUrlParameter = function (sParam, url) { 
//debugger; 
//window.location.search 
var sPageURL = decodeURIComponent(url.substring(1)), 
    sURLVariables = sPageURL.split('&'), 
    sParameterName, 
    i; 

for (i = 0; i < sURLVariables.length; i++) { 
    sParameterName = sURLVariables[i].split('='); 

    if (sParameterName[0] === sParam) { 
     return sParameterName[1] === undefined ? true : sParameterName[1]; 
    } 
} 

}的getUrlParameter功能;

3)然后我测试包含数据,即不为空,并附加它们作为一行到汇总表体的物体,下面

if (jobName[1]) { 
         var newRow = "<tr><td></td><td>" + "Job Name" + "</td>" + "<td>" + jobName[1] + "<td></td></tr>" + tbody.append(newRow); 
        } 

一个例子,我已经试过研究这个在这里SO,例如Internet Explorer Incompatibility - page just shows "[object Object]" WTH?

但一直无法找到解决方案或完全了解问题。

我想知道

1)为什么在IE9和IE8确实这个问题发生,而不是浏览器,火狐,IE 10和IE11,微软边缘?

2)我能做些什么来解决这个问题?

+0

我建议花一些时间调试(IE9提供一个内置的调试器)或至少足够去建立一个[MCVE]用可运行的现场示例(使用堆栈片断时,'<>'工具栏按钮)。 –

回答

0

这个问题是由于我错过了编码HTML以将新行添加到汇总表而造成的。

以前我每次追加新行,例如,作为

if (jobName[1]) { 
        var newRow = "<tr><td></td><td>" + "Job Name" + "</td><td>" + jobName[1] + "</td></tr>" + tbody.append(newRow); 
       } 

这是造成IE8和IE9的问题,这个小姐编码。

我已经通过分割新行和tbody.append(NEWROW)分成两个单独的语句改变了代码,一个例子如下

if (jobName[1]) { 
       var newRow = "<tr>" + "<td></td>" + "<td>" + "Job Name" + "</td><td>" + jobName[1] + "</td>" + "</tr>"; 
       tbody.append(newRow); 
      } 

和我的“精缩”窗口现在正确地在IE8渲染> IE11,Microsoft Edge,Chrome和Firefox。

Okay in IE8 and IE9