IE + getElementById

W spadku po odchodzącym pracowniku dostałem do utrzymania aplikację WWW jego autorstwa. Trafił do mnie nierozwiązany przez niego problem działania jednego formularza. Pod Firefoxem działało bez zarzutu, pod IE nie chciało – podczas zapisu do bazy zamiast przesyłanej wartości wrzucane było ‚undefined’. Samo ustalanie wartości pola odbywało się przez taki kawałek kodu:

function $(id) {
return document.getElementById(id);
}
(...)
<input type="text" id="login" name="login" />

przesyłane parametry przez AJAX:

{login: $('login').value, imie: $('imie').value, nazwisko: $('nazwisko').value}

Problem pojawiał się przy polu login. Na szybko wystarczyło zmienić atrybuty name i id, ale skąd się wziął problem?

W kodzie źródłowym nie było dwoch pól z id=”login”, ale wcześniej był tworzony formularz z parametrem name=”login”. Wg oficjalnej dokmentacji Microsoftu dla getElementById():

Returns the first object with the specified ID or NAME. (…) If more than one element is found, getElementById returns the first object in the collection.

Ponieważ formularz wystąpił wcześniej w drzewie dokumentu zwracał zgodnie z planem ‚undefined’. O ile jednak w tym przypadku chodziło o elementy formularza, to trzeba mieć na uwadze, że IE sprawdza całe drzewo dokumentu – nawet tagi <meta />! Ot, taka ‚cecha’ przeglądarki. Podobno w wersji ósmej działa już tylko na id.

Do poczytania także:
getElementById returns incorrect objects in IE and Opera
IE JavaScript Bugs: Overriding Internet Explorer’s document.getElementById() To Be W3C Compliant Exposes An Additional Bug In getAttributes()

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s