pedros100 napisał(a)
dlaczego skrypt nie działa jednakowo we wszystkich przeglądarkach i czy jest jakiś sposób żeby wszędzie było dobrze?
Bo różne przeglądarki mają różne silniki renderujące z różną obsługą CSS, JavaScriptu, DOM i BOM. To wszystko są jednak stosunkowo młode technologie, mające zaledwie jakieś 20 lat, a standaryzowane tak naprawdę od jeszcze krótszego okresu czasu.
Szczególnie słabą zgodność ze standardami ma IE. Ale: dzięki temu, że Microsoft... wykraczał poza specyfikację, mamy coś takiego jak Ajax, a ich tzw. model pudełkowy jest logiczniejszy od tego standardowego.
Technologie frontendowe rozwijają się bardzo prężnie, bo mają sporo do nadrobienia. Przykładowo, już obecnie, korzystając z JavaScriptu i odrobiny szeroko pojętego HTML-a 5, można tworzyć gierki, które chodziłyby w przeglądarce i odpowiadały złożonością grom komputerowym sprzed 15-20 lat. Być może dałoby się zejść i do 10, gdyby za tworzenie tych gier wzięły się porządne teamy.
Gry przeglądarkowe są jednak daleko w tyle za tymi natywnymi. Mają jednak szansę rozwijać się szybciej, na pewno szybciej w przeliczenu na zużyte na ten cel środki. Po prostu, aplikacje natywne już dawno wynalazły pewne rzeczy i teraz chodzi "tylko" o to, by przenieść to do przeglądarek.
Przez to wszystko, technologie frontendowe rozwijają się bardzo dynamicznie. Co i rusz dochodzą nowe funkcje, nowe możliwośći, nowe API. Animacje, transformacje, użycie nowoczesnych kart graficznych, nowe typy szybkiej komunikacji klient <-> serwer... To wszystko jest wdrażane zanim nawet powstaną stabilne wersje specyfikacji.
Różne przeglądarki są na różnym etapie wdrażania nowych bajerów. Sam fakt, że przeglądarki mają różne silniki renderujące jest bardzo korzystny. Od kilku lat (2-3?) obserwuje się wyścig zbrojeń wśród silników JavaScriptowych. Chrome bije się z Firefoxem i z Operą, a i Microsoft wypuszcza dużo, dużo szybsze przeglądarki niż jeszcze niedawno. Gdyby był jeden silnik, brak byłoby konkurencji i postęp nie byłby prawdopodobnie taki szybki.
W każdym razie, sam fakt istnienia różnych silników i nie zawsze stabilnych specyfikacji powoduje, że jeden kod może działać na jednej przeglądarce tak, a na drugiej inaczej.
Oczywiście, kod wysokiej jakości (nie chodzi o inżynierię oprogramowania, tylko o poziom kompatybilności) będzie działał w wielu przeglądarkach, w tym wszystkich najpopularniejszych. jQuery to jest biblioteka wysokiej jakości i z dobrą kompatybilnością. Robi to, co zapewnia, że robi w tych przeglądarkach, które zapewnia wspierać. Wśród tych przeglądarek jest IE, również w starszej wersji.
Kod wtyczek do jQuery to już coś zupełnie innego. Wtyczki mają bardzo różną jakość. Pisane są często przez zwykłych kmiotków. Często są też słabo przetestowane. Wtyczki mogą działać słabo lub w ogóle w różnych przeglądarkach. Niektóre wtyczki są całkiem dobre i działają dobrze.
Do tego dochodzi kod frameworków pisanych przez programistów backendowych, np. Javowców czy kolesi od C#. Oni potrafią wygenerować coś jeszcze niższej jakości niż twórcy wtyczek. Wyobraź sobie, że dajesz JavaScriptowcowi coś do napisania w Javie... też by mu za dobrze nie wyszło, bo to nie jego dziedzina.
I wreszcie Twój kod. Sądząc po zamieszczonych tu postach, póki co żaden z Ciebie programista JS. Jest bardzo prawdopodobne, że błąd jest w Twoim kodzie.
Na Twoim miejscu, szedłbym właśnie od tej strony. Sprawdził swój kod. Potem kod frameworka backendowego, jeśli takiego używam. Potem kod wtyczki do jQuery, a na końcu dopiero martwiłbym się o jQuery. To zapewne najlepszy fragment kodu frontendowego, jaki masz w swojej aplikacji. Był napisany przez dobrych programistów i jest naprawdę dobrze przetestowany. Ile testów jednostkowych napisałeś dla swojego kodu JS-owego? Ile testów ma wtyczka jQuery, której używasz? ;) No właśnie.
Tak czy siak, absolutnie nie da się nic powiedzieć na podstawie tego, co opisałeś. Opis błędów jest zbyt lakoniczny. Co mamy Ci poradzić, mając tylko jednozdaniowy opis tego, co robi dany moduł i komentarz, że "w IE nie działa"? Zdebugowałeś kiedyś cokolwiek "zaocznie" mając taki opis? Tak naprawdę to mogłeś dodać jeden przecinek za dużo w literale obiektowym i IE Ci się po prostu wysypało. My nie mamy jak tego sprawdzić, Ty masz. Konsola błędów!