【问题标题】:jQuery 1.7 working differently in IE8 and IE9?jQuery 1.7 在 IE8 和 IE9 中的工作方式不同?
【发布时间】:2012-03-19 21:49:21
【问题描述】:

我认为 jQuery 应该解决跨浏览器问题。无论如何,我有一些在 IE9、Firefox 和 Chrome 中运行良好但在 IE8 中运行良好的代码。我要做的就是加载带有选项的选择标签。我在页面上有以下选择标签:

 <select id="Select0"></select>

还有 jQuery (1.7):

 $(document).ready(function () { 
$.ajax({ 
       type: "POST", 
       url: "myPage.aspx/MyWebMethod", 
       contentType: "application/json; charset=utf-8", 
       data: "{}", 
       dataType: "json", 
       success: function (states) { 
           var jsonCodes = JSON.parse(states.d); 
           for (var i in jsonCodes) { 
               $("#Select0").append(new Option(jsonCodes[i].regionname, jsonCodes[i].region_id)); 
           } 
       } 
   });

我需要它也可以在 IE8 中工作,或者找到另一种可以在所有浏览器中工作的编码方式。 谢谢

【问题讨论】:

  • 从 jQuery 中受益的唯一方法是使用 jQuery。您混合了本机代码和 jQuery。这也很好,但是你需要知道兼容性问题。
  • I thought jQuery was supposed to resolve cross browser issues - 但在您的示例中,不仅有 jQuery,还有可能导致问题的 JSON 对象和 for 循环
  • 我应该改用 jQuery.getJSON() 吗?

标签: jquery internet-explorer-8 internet-explorer-9


【解决方案1】:

IE7 不支持JSON.parse。 jQuery 当然有解决这个问题的方法。试试这个:

var jsonCodes = $.parseJSON(states.d); 

更新:

我无法让$(element).append(new Option(x,y)); 在 IE8 中工作。该选项被附加没有标签。 http://jsfiddle.net/7qfhg/。试试改成这个语法http://jsfiddle.net/7qfhg/3/:

var sel = $("select");
for (var i = 1; i <= 50; i++) {
      sel.append("<option value='" + i + "'>" + i + "</option>");
}

【讨论】:

  • 这很有趣,我会在明天重新开始工作时尝试它,但是....在代码中的其他地方使用 JSON.parse 将数据行附加到 HTML 表中,它工作得很好在 IE8 中。感谢您的意见。
  • 你说得对,IE8确实支持JSON.parse,对不起。 IE7 肯定不会。
  • 除了切换到$.parseJSON(),我看不出有什么问题。如果$.parseJSON() 不适用于所有浏览器,请确保您的json 在jsonlint.com 处有效
  • 这最终带来了适用于 IE8 的解决方案。必须像这段代码一样更改循环和附加。它最终与 json 调用无关 - 已发布。
【解决方案2】:

你不需要包括这个:

var jsonCodes = JSON.parse(states.d); 

因为当dataTypejson 时,jQuery 会为你解析它。

【讨论】:

  • 为什么一个 HTML 字符串比直接创建一个 DOM 元素更好?
  • 糟糕,我在想别的事。
  • @amnotiam 我现在真的很想知道这个。 new Option() 似乎没有正确设置 IE8 中的标签值。请参阅我最新编辑中的小提琴。
  • @KevinB:这似乎是 IE 中 .appendChild() 上的 select 元素的问题。我猜 jQuery 并没有修复这个错误。他们需要.append()elem.options[elem.options.length] = new_option 或类似的东西。
猜你喜欢
  • 2011-10-09
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
相关资源
最近更新 更多