Mootools 1.3.2 & IE8 Only Error, Object не поддерживает свойство / метод - PullRequest
2 голосов
/ 29 июля 2011

Мой скрипт выдает ошибку только в IE8.Я использую Mootools 1.3.

Выдается ошибка:

Объект не поддерживает это свойство / метод.

Отладчик IE8 сообщает мне, что ошибкаthis (строка с **):

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'));
    });

Первый массив (с) заполнен только числами.Второй (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раз.На четвертой странице есть форма опыта работы.Вот что делает приведенный выше код.

Ответы [ 3 ]

2 голосов
/ 29 июля 2011

Ошибка возникла из поля, которое я имел в моей форме.Идентификатор поля был «position», который явно конфликтовал с чем-то в ie8.Переименовал мое поле в pos, и теперь все работает.

0 голосов
/ 29 июля 2011

хорошо, я немного отлаживал код ... и я думаю, что ваша проблема в том, когда вы пытаетесь отобразить всплывающую подсказку для сообщения проверки. Я предполагаю, что есть проблема со звуком, который должна воспроизводить подсказка.

Мой совет будет изменить эту строку:

validateStep: function(x) {
 ...
 // line 6230
 this.fields[i].fieldToolTip('Your ' + names[i] + ' should be a minimum of ' + (lengths[i]+1) + ' characters.');

до простого alert() (или, может быть, просто прокомментируйте эту строку), просто чтобы увидеть, если это проблема. Если это проблема, вы можете отключить звук и, надеюсь, у вас не будет этой проблемы

Удачи!

0 голосов
/ 29 июля 2011

Я получаю точно такую ​​же ошибку.

Мой код очень прост:

alert(document.id('YouTubeFlashPlayer').get('id'));

Однако он запускается через Element.addEvent () внутри объекта класса MooTools. Оскорбительный метод выше -

.get()

Как будто IE8 полностью игнорирует расширенные методы MooTools , так как

document.id('YouTubeFlashPlayer')

фактически предупредит объект HTML.

Я почти в конце своей веревки с IE8. Я собираюсь изгнать его через

if(Browser.ie8) document.getElement('body').dispose();
...