2010-06-23 13 views
6

In FF verbirgt alle divs und zeigt dann die ID, die aus dem Menü "#rule_rule_type" ausgewählt wurde, das ist das erwartete Verhalten. In IE 8 es versteckt nicht alle div ids:jQuery hide() funktioniert nicht wie erwartet auf 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> 

jedoch Dies funktioniert 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> 

Dies ist chaotisch. Wie kann ich dies sauberer machen und trotzdem in IE 8 arbeiten?

Danke,
Chip Castle
http://invoicethat.com

+1

funktioniert gut für mich: http://jsfiddle.net/bYzcv/ – user113716

+2

Was Doctype verwenden Sie in Ihrer HTML-Seite? Stellen Sie außerdem sicher, dass auf Ihrer Seite nicht zwei Elemente mit derselben ID vorhanden sind. – Behrang

+3

Welche Version von jQuery? Ich habe bemerkt, dass sogar jQuery 1.3.2 seltsame Macken mit IE8 hat, die irgendwo in der 1.4.x Zeile behoben wurden. – Powerlord

Antwort

0

Ich habe Ihre HTML nicht gesehen, aber die Art, wie Sie genannt haben und Ihre IDs oben genannten schlägt vor, dass Sie die gleiche ID mehr als einmal verwendet werden kann. Nur eine Vermutung.

+0

Die IDs sehen sicher einzigartig für mich aus. Was ist mit seinem Code suggeriert? – user113716

0

Haben Sie versucht, Ihr HTML-Dokument zu validieren? Weiß nicht, ob das funktioniert, aber ein weiterer Weg ...

0

Was passiert, wenn Sie allen DIVs, die Sie ein- und ausblenden, eine Klasse hinzufügen und diesen leicht umformulierten Code verwenden? In diesem Beispiel würden Sie „classofalldivs“ als eine Klasse zu jenen divs hinzufügen, die Sie beeinflussen möchten:

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

dies die „nicht“ Pseudo-Selektor verwendet alles, aber das div verstecken Sie zeigt, und hat eine Chance, in IE und FF zu arbeiten.

Nachdem ich das gesagt habe, stimme ich den anderen Vorschlägen zu, dass Ihr ursprünglicher Code nicht falsch aussieht, also könnten andere seltsame Dinge passieren. Können Sie ein vollständiges und vollständiges Beispiel Ihres Problems veröffentlichen, damit andere es reproduzieren können?

1

Ich führe Ihre Probe gerade gut in IE8 und Chrome. Ist es in irgendeiner Weise anders?

<!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> 
Verwandte Themen