2010-06-18 13 views
15

Ich habe Probleme beim Überprüfen der ausgeblendeten Kontrollkästchen im IE. Dies ist die Basis html:Labels und versteckte Felder in Internet Explorer (und Jquery)

<input id="groups_ids_1" name="group_ids[]" type="checkbox" value="1" /> 
<label for="groups_ids_1">Display</label> 

Dies funktioniert gut, aber wenn ich dann die Kontrollkästchen verstecken entweder

$('input[type=checkbox]').hide(); 

oder

$('input[type=checkbox]').css('visibility', 'hidden'); 

Durch Klicken auf das Etikett nicht mehr überprüft das Kontrollkästchen IE. Natürlich funktioniert es in Firefox, Chrome und Safari.

Antwort

12

Sie könnten versuchen, einen onclick auf das Etikett hinzugefügt, um die IE-Probleme zu umgehen.

Wenn das nicht funktioniert, versuchen Sie das Attribut manuell zu setzen.

+0

ich irgendwie hatte gehofft, zu vermeiden Dies ein s Ich habe den Callback für .andchanged für meine Checkbox-Felder verwendet, und das fühlte sich ein bisschen hacky an.Aber nach einigen Experimenten scheint es die einzige Problemumgehung zu sein. Danke für Ihre Reaktion :) –

+0

Beachten Sie, dass dies die Checkbox Änderung 2 mal auf anderen Browsern auslösen könnte –

3

Der beste Weg, dies zu vermeiden, ist das Kontrollkästchen absolut oben: -1000px;

13

Versteckte Kontrollkästchen Ereignisse nicht in IE-Version unter 9. Meine verallgemeinerte Lösung erhalten ist wie folgt:

/* hide checkboxes */ 
input[type=checkbox] { 
    visibility: hidden; 
    position: absolute; /* move out of document flow */ 
} 
/* ie8-: hidden inputs don't receive events, move out of viewport */ 
.lt-ie9 input[type=checkbox] { 
    visibility: visible; 
    top: -50px; 
} 

nicht Sie die Eingänge auf der linken Seite oder die Seite im IE springt bewegen, wenn der Eingang erhält den Fokus! .lt-ie8 ist eine Klasse, auf dem HTML-Tag für alte IE-Versionen auf diese Weise festgelegt ist: (siehe zB: https://github.com/h5bp/html5-boilerplate/blob/master/index.html)

<!--[if IE 8]> <html class="no-js lt-ie9" lang="en"> <![endif]--> 

Aber Sie können Ihre bevorzugte Methode verwenden, um anzuwenden, um die Eigenschaften in der zweiten Regel zu alte IE-Version nur. Die Anwendung der Regeln über JS sollte auch funktionieren, wie Sie es anscheinend tun.

+0

Dies ist eine viel bessere Antwort als die akzeptierte, auch lesenswert, was die Jquery Devs über das Problem zu sagen hatten, hier: http://bugs.jquery.com/ticket/8508 –

+0

wirklich sehr hilfreich. ich danke dir sehr. –

0

Dieser arbeitete für mich in IE8:

<!--[if IE 8 ]> 
<style> 
    input[type=checkbox] { 
    position: absolute; 
    filter: alpha(opacity=0); 
    } 
</style> 
<![endif]--> 
2

Marc Diethelm: Hidden Kontrollkästchen erhalten keine Ereignisse in IE-Version unter 9.

Als Variante statt visibility: hidden; oder display: none, Verwendung clip: rect(0 0 0 0);

Also statt

$('input[type=checkbox]').hide(); 

oder

$('input[type=checkbox]').css('visibility', 'hidden'); 

Verwendung so etwas wie

$('input:checkbox').addClass('hidden'); 

und

input[type=checkbox].hidden { 
    clip: rect(0 0 0 0); 
    position: absolute; /* move out of document flow */ 
} 

es in der normalen Browsern funktioniert und in IE8

+0

Sehr elegante Lösung. Es wirkt wie ein Zauber. Vielen Dank! –

+1

Nein, das ist nicht "elegant". Warum, weil es einen Hack/Workaround für alle Browser für immer anwendet. Obwohl alle modernen Browser natürlich das korrekte Verhalten mit 'visibility: hidden' unterstützen. Sie können sehr sicher sein, dass die Verwendung von 'clip' viel (!) Rechenintensiver ist als die Standardlösung. –