2009-02-25 10 views
34

Qualcuno ha qualche idea su come testare qualcosa di specifico per IE6 (e non IE7) usando jquery.support?Rilevamento di IE6 tramite jQuery.support

Il mio problema è che IE6 supporta: hover psuedo-class solo per elementi di ancoraggio e IE7 lo supporta per tutti gli elementi (come FF, Chrome, ecc.). Quindi voglio fare qualcosa di speciale nel caso in cui il browser non supporti: passa il mouse su tutti gli elementi ... quindi ho bisogno di un modo per testare questa funzionalità. (non voglio usare jQuery.browser). Qualche idea?

+0

nessuna delle risposte al di sotto in realtà risponde alla domanda! questo è assurdo. – vsync

risposta

55

Mentre è buona norma controllare il supporto delle funzionalità piuttosto che l'agente utente, non esiste un modo semplice per verificare qualcosa come il supporto di una proprietà css che utilizza JavaScript. Vi consiglio di seguire il suggerimento dei post sopra riportati sull'uso dei commenti condizionali o di usare jQuery.browser. Una semplice implementazione (non convalidato per le prestazioni o insetti) potrebbe essere la seguente:

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'); 
    } 
} 

nel markup, aggiungere la classe .jshover a qualsiasi elemento che si desidera librarsi effetti CSS via. Nel CSS, aggiungere regole in questo modo:

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

Questo è quello che ho finito anche io. Volevo solo sapere se c'era un modo migliore per farlo – Jaime

+5

Non dovresti davvero usare $ .browser - è deprecato. – Sampson

+0

@ Jonathanl: Esattamente ... quindi cosa dovrei usare per questo? – Jaime

21

È possibile utilizzare un Microsoft Internet Explorer specifica Conditional Comment di applicare specifiche codice a solo IE6.

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

Questa è probabilmente l'opzione migliore, mi chiedo solo se qualcuno aveva un altro modo per farlo ...dal momento che il documento jquery dice "jQuery viene fornito con un numero di proprietà incluse, dovresti sentirti libero di aggiungere il tuo.". Grazie comunque – Jaime

+0

Questo non funzionerà se stai caricando script in modo dinamico o eseguendo codice su elementi creati dinamicamente (modali, per esempio). – KyleFarris

+0

@KyleFarris dipende ... puoi controllare IE6 con il commento condizionale e se incontri questa condizione, imposta i gestori jQuery come necessario per tutti gli elementi DOM esistenti e gli elementi futuri usando un gestore '.live()' (in jQuery su alla v1.8) o il preferito '.on()' da jQuery 1.7+ http://api.jquery.com/on/ – scunliffe

2

Questo è un esempio di dove dovremmo fare un passo indietro e chiedere perché lo stai facendo.

In genere è per creare un menu. Se è così, consiglio vivamente di risparmiare alcuni mal di testa e utilizzare un plug-in come superfish o una delle tante alternative.

In caso contrario, suggerisco di utilizzare il listener di eventi jQuery hover(). Ad esempio:

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

farà quello che vuoi.

+0

Sto facendo un elenco a discesa personalizzato con potenzialmente molti articoli, quindi voglio usa l'evento jquery.hover nel caso in cui sia Jaime

+0

La velocità di: aleggia un problema? Per dirla in altro modo: vale il costo della complessità del supporto di una soluzione mista? – cletus

+0

Buona domanda, probabilmente no, sembra solo un po 'pigro usando l'evento hover – Jaime

20

Thickbox utilizza

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

finora l'opzione migliore +1, correlati: 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

Hai perso il punto della domanda: '$ .browser' non esiste più in jQuery. – Synchro

1

Solo per divertimento (non usare jQuery.support):

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

È anche possibile farlo via php

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