IE8是否有JS交换机的问题?

时间:2014-02-27 14:41:25

标签: javascript jquery internet-explorer-8

我正在构建一个需要与IE8兼容的javascript。在测试我的代码时,IE8会在我的交换机上被绊倒。我无法提供任何关于它为什么会这样做的好文档。所以我正在寻找的是一个很好的资源或答案为什么这段代码被绊倒:

$div.attr('shippingtotal', price.trim());
            switch (method.trim().toUpperCase()) {
            case 'STANDARD GROUND':
                $div.attr('value', 'UG');
                break;
            case 'THIRD DAY GROUND':
                $div.attr('value', 'UTS');
                break;
            case 'SECOND DAY AIR':
                $div.attr('value', 'US');
                break;
            case 'NEXT DAY':
                $div.attr('value', 'UNN');
                break;
            }

控制台错误显示它来自第40行,属于第三次突破。

2 个答案:

答案 0 :(得分:2)

问题不在于转换,而在于使用String.prototype.trim。它是IE8中的not implemented,您需要对其进行填充或使用具有修剪功能的库,例如: jQuery.trim

答案 1 :(得分:1)

我认为您的switch没问题。尝试使用if-else代替,我相信你会得到同样的错误。

$div.attr('shippingtotal', price.trim());
var ucMethod = method.trim().toUpperCase();
if (ucMethod == 'STANDARD GROUND')
    $div.attr('value', 'UG');
else if (ucMethod == 'THIRD DAY GROUND')
    $div.attr('value', 'UTS');
else if (ucMethod == 'SECOND DAY AIR')
    $div.attr('value', 'US');
else if (ucMethod == 'NEXT DAY')
    $div.attr('value', 'UNN');

var valueMap = {
    'STANDARD GROUND': 'UG',
    'THIRD DAY GROUND': 'UTS',
    'SECOND DAY AIR': 'US',
    'NEXT DAY': 'UNN'
};

$div.attr('shippingtotal', price.trim());
$div.attr('value', valueMap[method.trim().toUpperCase()]);

您不应该依赖ie8错误消息。你应该编写单元测试。我认为可以使用karma运行它们。我猜jquery有问题ie8,但我不确定......

我认为ie8不支持trim()方法。您应该使用polyfill

if (!String.prototype.trim) {
  String.prototype.trim = function () {
    return this.replace(/^\s+|\s+$/g, '');
  };
}