2009-02-25 14 views
34

Ktoś ma jakieś pomysły, jak testować czegoś specyficzne dla IE6 (a nie IE7) przy użyciu jquery.support?Wykrywanie IE6 przy użyciu jQuery.support

Moim problemem jest to, że IE6 obsługuje: hover psuedo klasy tylko dla elementów kotwiących i IE7 nie obsługuje go dla wszystkich elementów (tak jak FF, Chrome, etc). Dlatego chcę zrobić coś specjalnego na wypadek, gdyby przeglądarka nie obsługiwała: najechania na wszystkie elementy ... w ten sposób potrzebuję sposobu na przetestowanie tej funkcji. (nie chcę używać jQuery.browser). Jakieś pomysły?

+0

żadna z odpowiedzi poniżej rzeczywiście odpowiada na pytanie! To jest absurd. – vsync

Odpowiedz

55

Choć jest to dobra praktyka, aby sprawdzić wsparcie funkcji, a następnie agenta użytkownika, nie ma prosty sposób na sprawdzenie czegoś podobnego wsparcia dla właściwości CSS przy użyciu JavaScript. Polecam albo postępować zgodnie z powyższymi postami sugerującymi użycie warunkowych komentarzy lub użyć jQuery.browser. Proste wdrożenie (nie sprawdzane pod kątem wydajności lub błędów) mógłby wyglądać następująco:

if ($.browser.msie && $.browser.version.substr(0,1)<7) { 
    // search for selectors you want to add hover behavior to 
    $('.jshover').hover(
    function() { 
     $(this).addClass('over'); 
    }, 
    function() { 
     $(this).removeClass('over'); 
    } 
} 

W znaczników, dodaj klasę .jshover do każdego elementu, który chcesz najechaniu na efekty css. W swojej css, dodać reguły tak:

ul li:hover, ul li.over { rules here } 
+0

Z tego też pochodzi. Chciałem tylko wiedzieć, czy jest lepszy sposób na zrobienie tego. – Jaime

+5

Naprawdę nie powinieneś używać $ .browser - jest przestarzały. – Sampson

+0

@ Jonathanl: Dokładnie ... co powinienem dla tego zrobić? – Jaime

21

Można użyć programu Microsoft Internet Explorer specyficzny Conditional Comment zastosować specyficzny kod do tylko IE6.

<!--[if IE 6]> 
    Special instructions for IE 6 here... e.g. 
    <script>...hook hover event logic here...</script> 
<![endif]--> 
+0

To jest chyba najlepszym rozwiązaniem, po prostu zastanawiasz się, czy ktoś miał inny sposób to zrobić ...ponieważ dokument jquery mówi: "jQuery zawiera wiele właściwości, powinieneś dodać własne.". Dziękuję i tak – Jaime

+0

To nie zadziała, jeśli dynamicznie ładujesz skrypty lub uruchamiaj kod na dynamicznie tworzonych elementach (na przykład modach). – KyleFarris

+0

@KyleFarris zależy od ... możesz sprawdzić IE6 za pomocą warunkowego komentarza i jeśli spełniasz ten warunek, skonfiguruj obsługę jQuery w razie potrzeby dla wszystkich istniejących elementów DOM i przyszłych elementów za pomocą procedury obsługi .live() '(w jQuery up do v1.8) lub preferowanego '.on()' z jQuery 1.7+ http://api.jquery.com/on/ – scunliffe

2

To jest jeden z przykładów tego, gdzie powinniśmy zrobić krok do tyłu i zapytać, dlaczego to robisz.

Zazwyczaj jest to, aby utworzyć menu. Jeśli tak, to bardzo proponuję, abyś uratował sobie niektóre bóle głowy i użył wtyczki, takiej jak superfish lub jednej z wielu alternatyw.

Jeśli nie proponuję użyć słuchacza jQuery hover() zdarzeń. Na przykład:

$("td").hover(function() { 
    $(this).addClass("hover"); 
}, function() { 
    $(this).removeClass("hover"); 
}); 

zrobi to, co chcesz.

+0

Robię niestandardową listę rozwijaną z potencjalnie dużą ilością elementów, więc chcę użyj zdarzenia jquery.hover w przypadku Jaime

+0

Czy szybkość: najechania na problem? Innymi słowy: czy koszt złożonego rozwiązania jest opłacalny? – cletus

+0

Dobre pytanie, prawdopodobnie nie, po prostu wydaje się nieco powolne za pomocą zdarzenia na hover – Jaime

20

Thickbox wykorzystuje

if(typeof document.body.style.maxHeight === "undefined") { 
    alert('ie6'); 
} else { 
    alert('other'); 
} 
+0

jak dotąd najlepsza opcja +1, Powiązane: http://stackoverflow.com/questions/8931729/some-none-ie-browsers-are-showing-true-for-ie6-browser-detection –

-2
if ($.browser.msie && parseInt($.browser.version, 10) == 6) { 
    alert("I'm not dead yet!"); 
} 
+0

Przeoczyłeś punkt pytania - '.browser' już nie istnieje w jQuery. – Synchro

1

dla zabawy (nie używając jQuery.support):

$(document).ready(function(){ 
    if(/msie|MSIE 6/.test(navigator.userAgent)){ 
     alert('OMG im using IE6'); 
    } 
}); 

Można również zrobić to za pośrednictwem PHP

<? 
if(preg_match('/\bmsie 6/i', $ua) && !preg_match('/\bopera/i', $ua)){ 
    echo 'OMG im using IE6'; 
} 
?> 
Powiązane problemy