Estoy usando jQuery para ocultar y mostrar elementos cuando se altera / hace clic en un grupo de botones de radio. Funciona bien en navegadores como Firefox, pero en IE 6 y 7, la acción solo ocurre cuando el usuario hace clic en otro lugar de la página.
Para elaborar, cuando carga la página, todo se ve bien. En Firefox, si hace clic en un botón de opción, se oculta una fila de la tabla y la otra se muestra inmediatamente. Sin embargo, en IE 6 y 7, hace clic en el botón de opción y no pasará nada hasta que haga clic en algún lugar de la página. Solo entonces IE vuelve a dibujar la página, ocultando y mostrando los elementos relevantes.
Aquí está el jQuery que estoy usando:
$(document).ready(function () {
$(".hiddenOnLoad").hide();
$("#viewByOrg").change(function () {
$(".visibleOnLoad").show();
$(".hiddenOnLoad").hide();
});
$("#viewByProduct").change(function () {
$(".visibleOnLoad").hide();
$(".hiddenOnLoad").show();
});
});
Aquí está la parte del XHTML que afecta. Toda la página se valida como XHTML 1.0 Strict.
<tr>
<td>View by:</td>
<td>
<p>
<input type="radio" name="viewBy" id="viewByOrg" value="organisation"
checked="checked" />Organisation</p>
<p>
<input type="radio" name="viewBy" id="viewByProduct" value="product" />Product</p>
</td>
</tr>
<tr class="visibleOnLoad">
<td>Organisation:</td>
<td>
<select name="organisation" id="organisation" multiple="multiple" size="10">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
</td>
</tr>
<tr class="hiddenOnLoad">
<td>Product:</td>
<td>
<select name="product" id="product" multiple="multiple" size="10">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
</td>
</tr>
Si alguien tiene alguna idea de por qué sucede esto y cómo solucionarlo, ¡sería muy apreciado!
fuente
click
difiere dechange
que su controlador de eventos también se llamará al hacer clic en la opción ya seleccionada, mientraschange
que no. Esta respuesta tiene un ejemplo de cómo usar jQuery.data
para comparar los valores antiguos y nuevos.El problema con el uso del
click
evento en lugar dechange
es que obtienes el evento si se selecciona la misma casilla de radio (es decir, no ha cambiado realmente). Esto se puede filtrar si verifica que el nuevo valor sea diferente al anterior. Esto me parece un poco molesto.Si usa el
change
evento, puede notar que reconocerá el cambio después de hacer clic en cualquier otro elemento en IE. Si llamablur()
alclick
evento, hará que elchange
evento se active (solo si las cajas de radio realmente han cambiado).Así es como lo estoy haciendo:
Ahora puede usar el evento change como normal.
Editar: se agregó una llamada a focus () para evitar problemas de accesibilidad (vea el comentario de Bobby a continuación).
fuente
¿Has probado el evento onpropertychange de IE? No sé si hace la diferencia, pero probablemente valga la pena intentarlo. IE no activa el evento de cambio cuando los valores se actualizan a través del código JS, pero tal vez onpropertychange funcionaría en este caso.
fuente
Esto también debería funcionar:
Gracias Pier. Esto fue muy útil.
fuente
click
conclick keyup keypress
para agregar soporte de teclado.En IE debes usar el evento click, en otros navegadores onchange. Tu función podría convertirse
fuente
click
conclick keyup keypress
para agregar soporte de teclado.agregue este complemento
luego
fuente
Tuve el mismo problema con el texto de entrada.
Cambié:
a
¡y todo está funcionando bien para mí!
fuente
Esta es una manera simple de decirle a IE que active el evento de cambio cuando se hace clic en el elemento:
Puede ampliar esto a algo más genérico para trabajar con más elementos de formulario:
fuente
Estoy bastante seguro de que este es un problema conocido con IE. Agregar un controlador para el
onclick
evento debería solucionar el problema:fuente
En IE, fuerce la radio y las casillas de verificación para activar un evento de "cambio":
fuente
a partir de jquery 1.6 esto ya no es un problema ... aunque no estoy seguro de cuándo se solucionó ... Gracias a Dios por ello
fuente
Si cambia su versión de jQuery a 1.5.1, no tendrá que ajustar su código. Entonces IE9 escuchará perfecto para:
http://code.jquery.com/jquery-1.5.1.min.js
fuente
el truco con el clic funciona ... pero si desea obtener el estado correcto de la radio o la casilla de verificación, puede usar esto:
fuente
El uso de clic en lugar de cambio hace que el comportamiento sea diferente. Prefiero emular el comportamiento del evento de cambio usando un temporizador (setTimout).
algo como (advertencia - código del bloc de notas):
fuente
prueba esto, me funciona
fuente
Esto puede ayudar a alguien: en lugar de comenzar con la identificación del formulario, oriente la identificación seleccionada y envíe el formulario en el cambio, de esta manera:
y el jQuery:
(Obviamente, el botón Enviar es opcional, en caso de que JavaScript esté deshabilitado)
fuente
Intenta lo siguiente:
fuente
Evite usar .focus () o .select () antes de la función .change () de jquery para IE, entonces funciona bien, lo estoy usando en mi sitio.
Gracias
fuente
fuente
Intente usar cada uno en lugar de cambiar / hacer clic , que funciona bien incluso la primera vez en IE, así como en otros navegadores
No funciona por primera vez
Trabajando bien incluso la primera vez
fuente