2010-06-23 4 views
6

In FF questo nasconde tutti i div e quindi mostra l'id che è stato selezionato dal menu '#rule_rule_type', che è il comportamento previsto. In IE 8 non nasconde tutti i div id:jQuery hide() non funziona come previsto su IE 8

<script type="text/javascript" charset="utf-8"> 
    (function($){ 
    $('#rule_rule_type').change(function() { 
     $('#allowed_senders, #blocked_senders, #blocked_character_set, #custom').hide(); 
     var id = $(this).val(); 
     $('#' + id).show(); 
    }); 
    })(jQuery); 
</script> 

Tuttavia, questo funziona in IE 8:

<script type="text/javascript" charset="utf-8"> 
    (function($){ 
    $('#rule_rule_type').change(function() { 
     $('#allowed_senders').hide(); 
     $('#blocked_senders').hide(); 
     $('#blocked_character_set').hide(); 
     $('#custom').hide(); 
     var id = $(this).val(); 
     $('#' + id).show(); 
    }); 
    })(jQuery); 
</script> 

Questa è disordinato. Come posso ripulirlo per essere più conciso e funzionare ancora in IE 8?

Grazie,
Chip Castello
http://invoicethat.com

+1

Funziona bene per me: http://jsfiddle.net/bYzcv/ – user113716

+2

Che doctype stai usando nella tua pagina HTML? Assicurati anche che non ci siano due elementi con lo stesso 'id' nella tua pagina. – Behrang

+3

Quale versione di jQuery? Ho notato che anche jQuery 1.3.2 ha stranezze strane con IE8 che sono state riparate da qualche parte nella riga 1.4.x. – Powerlord

risposta

0

non ho visto il codice HTML, ma il modo in cui hai fatto riferimento con nome e gli ID di sopra suggerisce che si può essere utilizzando lo stesso ID più di una volta. Solo una supposizione.

+0

Gli ID sono sicuramente unici per me. Cosa ne pensa del suo codice suggerisce diversamente? – user113716

0

Hai provato a convalidare il documento HTML? Non so se questo funziona, ma un altro modo ...

0

Cosa succede se aggiungi una classe a tutti i DIV che stai mostrando e nascondendo, e quindi usi questo codice leggermente riformulato? In questo esempio, si potrebbe aggiungere "classofalldivs" come una classe a quei div si vuole interessare:

(function($){ 
    $('#rule_rule_type').change(function() { 
     var id = $(this).val(); 
     $('#' + id).show(); 
     $('.classofalldivs:not(' + '#' + id+ ')').hide(); 
    }); 
    })(jQuery); 

Questo utilizza il "non" pseudo-selettore per nascondere tutto, ma il div si sta mostrando, e ha una possibilità di lavorare sia in IE che in FF.

Detto questo, sono d'accordo con gli altri suggerimenti sul fatto che il codice originale non sembri sbagliato, quindi potrebbero esserci altre strane cose. Puoi pubblicare un esempio completo e completo del tuo problema in modo che altri possano riprodurlo?

1

Sto eseguendo il tuo campione bene in IE8 e Chrome. È diverso in qualche modo?

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>jQuery Sandbox</title> 
</head> 
<body> 

    <select id='rule_rule_type'> 
     <option value="allowed_senders">allowed_senders</option> 
     <option value="blocked_senders">blocked_senders</option> 
     <option value="blocked_character_set">blocked_character_set</option> 
     <option value="custom">custom</option> 
    </select> 

    <hr /> 

    <div id="allowed_senders">#allowed_senders</div> 
    <div id="blocked_senders">#blocked_senders</div> 
    <div id="blocked_character_set">#blocked_character_set</div> 
    <div id="custom">#custom</div> 

    <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js"></script> 
    <script type="text/javascript"> 

     $(function() { 

      $('#rule_rule_type').change(function() { 

       $('#allowed_senders, #blocked_senders, #blocked_character_set, #custom').hide(); 

       var id = $(this).val(); 
       $('#' + id).show(); 

      }); 

     }); 

    </script> 
</body> 
</html>