我正在构建一个需要与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行,属于第三次突破。
答案 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, '');
};
}