Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JAVASCRIPT] IE8 Object required
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
TheaSiX
Napisalem prosty skrypt do animowanego menu, chodzi tylko o pojawianie się menu z góry w dół. W firefoxie wszystko działa jak należy. Niestety sytuacja przedstawia się o wiele gorzej w IE. dostaje błędy:

Cytat
Webpage error details
Message: Object required
Line: 17
Char: 4
Code: 0

Message: Object required
Line: 6
Char: 4
Code: 0


oto kod skryptu:

  1. function showUnderMenu(the_number){
  2. var the_number = parseInt(the_number);
  3. var all_divs = window.document.getElementsByName('menu-content');
  4. for(var loop=0;loop < all_divs.length+1;loop++) {
  5. if(loop == the_number) {
  6. var div_vis = all_divs.item(loop).style.visibility;
  7. if(div_vis == "hidden") {
  8. all_divs.item(loop).style.height = "0px";
  9. all_divs.item(loop).style.visibility = "visible";
  10. slideDiv(loop);
  11. }
  12. else {
  13. all_divs.item(loop).style.visibility = "hidden";
  14. }
  15. }
  16. else {
  17. all_divs.item(loop).style.visibility = "hidden";
  18. }
  19. }
  20. }


nie mam zielonego pojęcia dlaczego. Próbowałem zamiast zmiennych użyć całych ścieżek obiektu (window.document.get bla bla), ale to nie pomogło. Ktoś wie dlaczego w IE8 wszystko się sypie?
lord_t
Co to za metoda item()? Domyślam się jej działania, ale nie umiem naleźć na jej temat ani słowa na googlu. Czemu nie używasz po prostu nawiasów kwadratowych do wybrania elementu tablicy?

zegarek84
nie byłem pewny do końca (choć w sumie byłem dlatego pod tym kontem przeszukiwałem neta)
Cytat
@Rex - Nelson is annoyed about the fact that getElementsByName(name) does NOT return the correct results in IE6, IE7, [[AND WAS NOT FIXED IN IE8!!!]

w necie jest sporo fix'ów na to - więc albo z nich skorzystaj albo użyj innej metody do znajdowania elementów winksmiley.jpg

Cytat(lord_t @ 2.02.2010, 01:02:28 ) *
Co to za metoda item()? Domyślam się jej działania, ale nie umiem naleźć na jej temat ani słowa na googlu. Czemu nie używasz po prostu nawiasów kwadratowych do wybrania elementu tablicy?

https://developer.mozilla.org/pl/DOM_i_JavaScript
Cytat
Używamy również anchorTags[i], tej samej składni, która w JavaScripcie używana jest przy dostępie do i-tego elementu tablicy. Neutralnie językowym sposobem jest używanie metody item(), zdefiniowanej w interfejsie NodeList): anchorTags.item(1).href. Jednak większość implementacji JavaScriptu pozwala na używanie prostszej, tablicowej składni i takiej właśnie używa większość ludzi.


w php w DOM np. już przez tablicę nie da się odwołać winksmiley.jpg - ogólnie jest to odwołanie do kolejnego z elementów dom na liście
TheaSiX
pozmieniałem parę rzeczy, ale coś po drodze jeszcze bardziej mi się zamieszało. Zapytam więc od podstaw, a co..

  1. function showUnderMenu(theId){
  2. if(document.getElementById(theId).style.visibility == "hidden") {
  3. document.getElementById(theId).style.visibility = "visible";
  4. }
  5. }


z jakiej racji wypluwa błąd o braku obiektu? uprzedzam, że wcześniej miałme window.document i to samo. Wprawdzie działać skrypt działa, ale bład jest nadal..
zegarek84
może daj linka do wersji online?? - skoro piszesz, że działa i dokładnie nie wiadomo gdzie w końcu jest błąd - piszesz o całości a dajesz tylko fragment ;p
TheaSiX
to co dałem post nad Tobą to całość, tylko by sprawdzić, czy IE coś wypluje i wypluło..

udało mi się sprawić, że większość skryptu działa, ale błąd jest nadal. Nawet jeśli do wyniku atrybutu visibility przypiszę najpierw zmienną, a potem ją sprawdzę, to nadal jest błąd, ten sam, tam gdzie przypisuję zmienną.

fakt, że skrypt działa to jedno, ale znowu błąd komplikuje walidacje i pozycjonowanie, więc nadal byłoby wskazane go usunąć..
zegarek84
tak - całość - akurat IE na każdy błąd jest najbardziej czuły chyba ze wszystkich przeglądarek... i jeśli w jakiś sposób nie przechwytujesz błędów to po ich wystąpieniu następuje koniec skryptu - jak chcesz i uważasz, że ktoś inny będzie zgadywał to proszę bardzo winksmiley.jpg - chociaż nie mam pod ręką akurat IE to w powyższym błędu nie widzę ;p
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.