«Объект не поддерживает ...» IE8 останавливается на объявлении обычной переменной - PullRequest
1 голос
/ 24 февраля 2011

Я пытаюсь заставить форму отправлять свои данные через AJAX и отменять событие без jQuery, просто для изучения нативного javascript, который, как я понял, никогда не может быть плохим В любом случае, этот код возвращает ошибку «Объект не поддерживает это свойство или метод» в IE8 в строке, где я объявляю переменные s и r в функции send (). Я подумал, что проблема должна быть в другом месте? Код работает как в Firefox, так и в Chrome, не возвращая ошибок. Идеи?

// Function to serialize form
function serialize() {
    var a = document.getElementsByTagName('input'), b = '';
    for (i = 0; i < a.length; i++) {
        b += a[i].name + '=' + a[i].value + '&';
    }
    return b.substring(0, b.length - 1);
}

// Function to execute when user submits form
function send(evt) {
    // Prevent the page from reloading
    if (evt.preventDefault) {
        evt.preventDefault();
    } else {
        evt.returnValue = false;
    }
    // Declare DOM variables for quick access
    var s = document.getElementsByClassName('skicka')[0], r = document.getElementById('return');
    // Hides the submit button and return text
    s.style.visibility = 'hidden';
    r.style.visibility = 'hidden';
    // Initialize and send data and request to login.php
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'login.php', true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send(serialize());
    // Check for return value from login.php
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            if (xhr.responseText == true) {
                // If response if true, reload page
                window.location.reload(true);
            } else {
                // If response is false, reset form and show response
                s.style.visibility = 'visible';
                r.style.visibility = 'visible';
                r.innerHTML = xhr.responseText;
            }
        }
    };
    return false;
}

// Declare event listeners
if (window.addEventListener) {
    window.addEventListener('load', function() {
        document.forms[0].addEventListener('submit', send, false);
    }, false);
} else {
    window.attachEvent('onload', function() {
        document.forms[0].attachEvent('onsubmit', function() {
            send(window.event);
        });
    });
}

1 Ответ

4 голосов
/ 24 февраля 2011

IE8 не поддерживает .getElementsByClassName().См. Ultimate GetElementsByClassName для реализации чистого JavaScript, которая будет работать в IE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...