我的脚本仅在IE8中引发错误。我正在使用Mootools 1.3。
抛出的错误是:
对象不支持此属性/方法。
IE8调试器告诉我错误是这样的(带有**的行):
append: function(original){
for (var i = 1, l = arguments.length; i < l; i++){
var extended = arguments[i] || {};
**for (var key in extended) original[key] = extended[key];**
}
return original;
}
上面的代码在未压缩版本的380行附近。它是Object.extend的一部分。
现在,我怀疑在对类似对象的数组进行每次处理时会发生这种情况。这是我怀疑触发此代码的代码:
var self = this,
c = certManager.addedCerts,
e = window.expManager.workExp,
cA = this.cA = [],
eA = this.eA = [];
c.each(function(x){
cA.push(x.value);
});
e.each(function(x){
eA.push(x.retrieve('info'));
});
第一个数组(c)仅填充数字。第二个(e)填充有正在进行存储/检索的对象。
类似数组的对象声明如下:
addedCerts = this.addedCerts = []
workExp = this.workExp = []
在它们各自的模块(certManager和expManager)中。
有人知道为什么会这样吗?
编辑:
根据要求,这是workExp的填充方式:
var r = $('resumeContent'),
h = "<div class=\"contentRowRight\"><a href=\"#\" class=\"xHover remove\" > </a><br/>" + yV + " " + mV + "</div><strong>" + pV + "</strong><br />" + cV,
n = new Element('div', {html: h, 'class': 'contentRow'}).inject(r, 'top');
n.getElement('.remove').addEvents({
'click': function (e) {
e.preventDefault();
self.removeExp(this);
},
'mouseover': function(){
var el = this;
this.store('mO', true);
(function() {
if (el.retrieve('mO')){
el.fieldToolTip('Remove Experience',false,false);
el.store('mO', false);
}
}).delay(500);
},
'mouseout': function(){
this.store('mO', false);
this.removeToolTip();
}
});
n.store('info', {'p': pV, 'c': cV, 'y': yV.replace(' year', '').replace('s', '').replace(' and', ''), 'm': mV.replace('month', '').replace('s', '')});
this.workExp[this.workExp.length] = n;
我正在做的是表单的一部分。我在表单中有几个字段,您填写它们,然后单击“添加”按钮,它将创建一个新的“行”。这些行包含有关用户工作经历的信息。一旦用户添加了他所有的工作经验,他就可以继续填写表格。表单全部填写完毕后,我将遍历数组对象并将其转换为JSON对象,然后将其放入一个隐藏值并将其传递给后端。
[如果您想查看正在运行的脚本,则可以访问http://www.oilforce.com/user-signup.php。您将被迫填写第一页,即个人信息(您可以输入垃圾内容,这并不意味着您还是要提交它),然后按下3次。在第四页上,有工作经验表格。这就是上面的代码正在做的。
错误是由于我的表单中存在一个字段而引起的。该字段的ID为“位置”,显然与ie8中的某些内容发生冲突。将我的字段重命名为“ pos”,现在一切似乎都可以正常工作。
我遇到了完全相同的错误。
我的代码很简单:
alert(document.id('YouTubeFlashPlayer').get('id'));
但是它是通过MooTools类对象内的Element.addEvent()运行的。上面令人反感的方法是
.get()
好像IE8 完全忽略MooTools扩展方法,因为
document.id('YouTubeFlashPlayer')
实际上将警告HTML对象。
我快要用IE8了。我正在考虑通过
消除它if(Browser.ie8) document.getElement('body').dispose();
确定,我正在调试代码。.我认为您的问题是当您尝试显示验证消息的工具提示时。我的猜测是工具提示必须播放的声音存在问题。
我的建议是更改此行:
validateStep: function(x) {
...
// line 6230
this.fields[i].fieldToolTip('Your ' + names[i] + ' should be a minimum of ' + (lengths[i]+1) + ' characters.');
简单的alert()
(或者可能只是注释此行)只是为了查看这是否是问题。如果这是问题,您可以禁用声音,希望您不会有此问题
祝你好运!