«Объект не поддерживает это свойство или метод IE» ошибка в Javascript возможно из-за использования hasOwnProperty? - PullRequest
1 голос
/ 16 ноября 2011

По какой-то причине я получаю эту ошибку в IE8 и IE7.Я перебираю все ключи в моем объекте, и он постоянно говорит мне Object doesn't support this property or method об этом:

var inVal = $(inType + "#" + inName).val().trim();

Весь блок ниже:

for (var key in inputs) { // find all keys "brand", "name", etc. in our inputs object
        var errors = false;

        if (inputs.hasOwnProperty(key)) { // focus on our obj. not all others on page 
            var inType = inputs[key].inputType;
            var inName = inputs[key].inputName;
            var inVal = $(inType + "#" + inName).val().trim(); // construct input field

            if (inVal == '' || inVal == null) {
                errors = true;

                $('#' + inName + '-error').html('');
                $('#' + inName + '-error').hide().fadeIn().html(inputs[key].errorMsg);
                $(inType + '#' + inName).focus();
                $('#modal-loadable-inner').scrollTop(inputs[key].scrollTop);

                return;
            } else { // user corrected error
                errors = false;
                $('#' + inName + '-error').html(''); // remove error txt
            }
        }
    }

Кто-то опубликовал это наJslint доски Дуга Крокфорда, и он ответил:

for (ключ объекта) {if (Object.prototype.hasOwnProperty.call (object, key)) {...}}

hasOwnProperty должен был быть оператором, а не методом, потому что, будучи методом, он подвержен подобным проблемам.Но это то, что есть, поэтому вы должны обойти это.

Работает нормально в Chrome, FF, Safari, Opera и т. Д. Как обычно.Есть идеи об обходном пути?

Ответы [ 2 ]

4 голосов
/ 16 ноября 2011

Я думаю, это вызвано тем, что trim() не имеет этого метода для строки.

Попробуйте вместо этого

var inVal = $.trim($(inType + "#" + inName).val());
1 голос
/ 16 ноября 2011

.val() может не возвращать строку, поэтому вызов .trim() для нее, вероятно, вызывает проблему.Попробуйте использовать промежуточную переменную и убедитесь, что она не неопределена перед вызовом .toString().trim() (если .trim() - это метод, который вы добавили в строки в Javascript - метод jQuery - $.trim()).

...