2012-07-18 19 views
8

Estoy intentando crear una casilla de verificación personalizada utilizando la etiqueta asociada a un elemento de casilla de verificación y ocultando (mostrar: ninguno) la casilla de verificación.Haciendo clic en la casilla de verificación de etiqueta no marcada si está oculto al usar IE 7 u 8

Esto funciona bien en todos los navegadores, excepto en IE, que requiere que la casilla de verificación sea visible para que se pueda hacer clic en la etiqueta.

Aquí está mi código ...

HTML

<input type="checkbox" id="myCheck" />​ 

CSS

label.checkbox { 
    border:1px solid #666; 
    width:25px; 
    height:23px; 
    display:block; 
}​ 

jQuery

$("input[type=checkbox]").each(function() { 
    $(this).hide().before('<label for="' + $(this).attr("id") + '" class="checkbox"></label>'); 
}); 

$("input[type=checkbox]").live('change', function() { 
    if ($(this).prop('checked') == true) { 
     $('label[for=' + $(this).attr("id") + ']').html("X") 
    } else { 
     $('label[for=' + $(this).attr("id") + ']').html("") 
    } 
});​ 

O jsfiddle

+0

Creo que esto sucede en Firefox también, pero no estoy seguro. – Inkbug

+0

No está en la última versión de FF en OSX, aunque no se ha probado en Windows. – Tom

Respuesta

9

No sé si hay una forma más Efectiva de hacer esto, pero se puede hacer esto mediante el establecimiento de posición Elementos de casilla de verificación de la página,

.hiddenEl { 
    position:absolute; 
    top: -3000px; 
} 


$("input[type=checkbox]").each(function() { 
    $(this).addClass("hiddenEl").before('<label for="' + $(this).attr("id") + '" class="checkbox"></label>'); 
}); 

DEMO


ACTUALIZAR

Y también puede establecer opacidad checbox a cero, que lo ocultará sin "dispayl: ninguno",

$(this).css("opacity", 0) 

o

$(this).fadeTo(0, 0) 
+7

Nota: En general, es mejor usar 'left: -3000px' en lugar de' top: -3000px' (o 9999px). Cuando haces clic en la etiqueta con 'top', el foco se establece en el botón de radio e IE8 intentará mostrarlo, teniendo el desafortunado efecto secundario de desplazarse hacia la parte superior de la página. Así que si su contenido se ajusta horizontalmente sin barra de desplazamiento horizontal, es mejor usar 'left' que' top' –

+0

La propiedad 'opacity' no es compatible con Internet Explorer hasta la versión IE9, por lo tanto tuve que usar' filter: Alpha (opacity = 0) '. [mozilla-css-opacity] (https://developer.mozilla.org/en-US/docs/Web/CSS/opacity) – ityler22

+0

@ ityler22, creo que no tiene que preocuparse por eso porque es manejado por jquery . – ocanal

2

probar esto:

#myCheck{ 
    position:absolute; 
    left:-9999px; 
    } 

y dejar la casilla de verificación "visible"

Cuestiones relacionadas