indexOf 在 IE 中导致错误;在其他浏览器中工作
indexOf causing error in IE; working in other browsers
编辑:我非常困惑。我有一个网页的本地副本,其中我将 'indexOf' 函数添加到 javascript 文件。此页面正在运行。但是,我将更改推送到的实时站点上的页面仍然出现 indexOf 错误。此外,网站上使用完全相同脚本的另一个页面没有出现任何错误。 giftFeatures[giftB] 应该没有问题,因为根据调试器,它 是 一个数组。
This is a URL for the problem page
This is a page that uses the exact same script with no errors
这两个页面有什么区别,为什么第二个可以用,而第一个不行?这真让我抓狂。
我有一个附加到页面的脚本,该脚本可在除 IE(使用 IE11)以外的所有浏览器中运行。这是不起作用的方法:
buildComparisonData: function() {
this.comparisonData = [];
var giftA = this.selectedGifts[0];
var giftB = this.selectedGifts[1];
if(this.selectedGifts.length == 3)
var giftC = this.selectedGifts[2];
for(var i = 0; i < this.config.giftFeatureLabels.length; i++) {
var label = this.config.giftFeatureLabels[i].feature;
var checkimg = '<img src="https://www.giftcalcs.com/sites/all/modules/custom/pgc_giftcompare/check-mark.png">';
var giftBChecked = this.config.giftFeatures[giftB].indexOf(i) < 0 ? '' : checkimg;
var giftAChecked = this.config.giftFeatures[giftA].indexOf(i) < 0 ? '' : checkimg;
if(this.selectedGifts.length == 3)
var giftCChecked = this.config.giftFeatures[giftC].indexOf(i) < 0 ? ' ' : checkimg;
var row = {
label: label,
giftA: giftAChecked,
giftB: giftBChecked
};
if(this.selectedGifts.length == 3)
row.giftC = giftCChecked;
this.comparisonData.push(row);
var comparisonLabels = {};
comparisonLabels.giftA = this.getGiftLabel(this.selectedGifts[0]);
comparisonLabels.giftB = this.getGiftLabel(this.selectedGifts[1]);
if(this.selectedGifts.length == 3)
comparisonLabels.giftC = this.getGiftLabel(this.selectedGifts[2]);
this.comparisonLabels = comparisonLabels;
}
断行是
var giftBChecked = this.config.giftFeatures[giftB].indexOf(i) < 0 ? '' : checkimg;
它说“对象不支持 属性 或方法 'indexOf'
该脚本在 Chrome 和 Firefox 中没有错误。我可以在 giftFeatures[giftB] 上获得 indexOf,但在 IE 中不能。
你应该定义方法 indexOf
当它不存在时:
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(obj, start) {
for (var i = (start || 0), j = this.length; i < j; i++) {
if (this[i] === obj) {
return i;
}
}
return -1;
}
}
您还应该查看此 question,其中有多种解决此问题的方法。
编辑:我非常困惑。我有一个网页的本地副本,其中我将 'indexOf' 函数添加到 javascript 文件。此页面正在运行。但是,我将更改推送到的实时站点上的页面仍然出现 indexOf 错误。此外,网站上使用完全相同脚本的另一个页面没有出现任何错误。 giftFeatures[giftB] 应该没有问题,因为根据调试器,它 是 一个数组。
This is a URL for the problem page
This is a page that uses the exact same script with no errors
这两个页面有什么区别,为什么第二个可以用,而第一个不行?这真让我抓狂。
我有一个附加到页面的脚本,该脚本可在除 IE(使用 IE11)以外的所有浏览器中运行。这是不起作用的方法:
buildComparisonData: function() {
this.comparisonData = [];
var giftA = this.selectedGifts[0];
var giftB = this.selectedGifts[1];
if(this.selectedGifts.length == 3)
var giftC = this.selectedGifts[2];
for(var i = 0; i < this.config.giftFeatureLabels.length; i++) {
var label = this.config.giftFeatureLabels[i].feature;
var checkimg = '<img src="https://www.giftcalcs.com/sites/all/modules/custom/pgc_giftcompare/check-mark.png">';
var giftBChecked = this.config.giftFeatures[giftB].indexOf(i) < 0 ? '' : checkimg;
var giftAChecked = this.config.giftFeatures[giftA].indexOf(i) < 0 ? '' : checkimg;
if(this.selectedGifts.length == 3)
var giftCChecked = this.config.giftFeatures[giftC].indexOf(i) < 0 ? ' ' : checkimg;
var row = {
label: label,
giftA: giftAChecked,
giftB: giftBChecked
};
if(this.selectedGifts.length == 3)
row.giftC = giftCChecked;
this.comparisonData.push(row);
var comparisonLabels = {};
comparisonLabels.giftA = this.getGiftLabel(this.selectedGifts[0]);
comparisonLabels.giftB = this.getGiftLabel(this.selectedGifts[1]);
if(this.selectedGifts.length == 3)
comparisonLabels.giftC = this.getGiftLabel(this.selectedGifts[2]);
this.comparisonLabels = comparisonLabels;
}
断行是
var giftBChecked = this.config.giftFeatures[giftB].indexOf(i) < 0 ? '' : checkimg;
它说“对象不支持 属性 或方法 'indexOf'
该脚本在 Chrome 和 Firefox 中没有错误。我可以在 giftFeatures[giftB] 上获得 indexOf,但在 IE 中不能。
你应该定义方法 indexOf
当它不存在时:
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(obj, start) {
for (var i = (start || 0), j = this.length; i < j; i++) {
if (this[i] === obj) {
return i;
}
}
return -1;
}
}
您还应该查看此 question,其中有多种解决此问题的方法。