haga clic o cambie el evento en la radio usando jquery

86

Tengo algunas radios en mi página y quiero hacer algo cuando la radio marcada cambie, sin embargo, el código no funciona en IE:

$('input:radio').change(...);

Y después de buscar en Google, la gente sugiere usar el clic en su lugar. Pero no funciona.

Este es el código de ejemplo:

<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
        <script type="text/javascript">
            $('document').ready(
                function(){
                    $('input:radio').click(
                        function(){
                            alert('changed');   
                        }
                    );  
                }
            );

        </script>
    </head>
    <body>
        <input type="radio" name="testGroup" id="test1" />test1<br/>
        <input type="radio" name="testGroup" id="test2" />test2<br/>
        <input type="radio" name="testGroup" id="test3" />test3</br>
    </body>
</html>

Tampoco funciona en IE.

¿Entonces quiero saber qué está pasando?

También me temo que volverá a activar el evento de cambio si hago clic en una radio marcada.

ACTUALIZAR:

No puedo agregar comentario, por eso respondo aquí.

Yo uso IE8 y el enlace que me dio Furqan tampoco funciona en IE8. No se por que...

hguser
fuente
1
¿Qué versión de IE estás usando para la prueba? Tu código me funciona en IE8. Tiene razón en que el evento se activará si hace clic en una radio marcada. Necesita realizar una verificación en su código para evitar esto.
kgiannakakis
funciona para mí, consulte el siguiente jsfiddle.net/NerXh
Furqan Hameedi

Respuestas:

111

Este código funcionó para mí:

$(function(){

    $('input:radio').change(function(){
        alert('changed');   
    });          

});

http://jsfiddle.net/3q29L/

alexl
fuente
4
Esto no funciona para mí cuando se apunta a una sola radio y seleccionar otra radio hace que la otra anule la selección.
Doug Amos
1
Excepto cuando el rendimiento es un problema en una página con muchos elementos. En cuyo caso, utilice $('input[type=radio]')en su lugar (consulte "notas adicionales": api.jquery.com/radio-selector )
jemmons
72

Puede especificar el atributo de nombre de la siguiente manera:

$( 'input[name="testGroup"]:radio' ).change(
Iwao Nishida
fuente
8
Menos ambigüedad. Práctica mucho mejor. +1
Jacks_Gulch
14

También funciona para mí, aquí hay una mejor solución:

demo de violín

<form id="myForm">
  <input type="radio" name="radioName" value="1" />one<br />
  <input type="radio" name="radioName" value="2" />two 
</form>

<script>
$('#myForm input[type=radio]').change(function() {       
    alert(this.value);
});
</script>

Debe asegurarse de inicializar por jqueryencima de todas las demás funciones de importación y JavaScript. Porque $es una jqueryfunción. Incluso

$(function(){
 <code>
}); 

no comprobará jqueryinicializado o no. Se asegurará de que <code>se ejecute solo después de que se inicialicen todos los javascripts.

suhailvs
fuente
7

Tratar

$(document).ready(

en vez de

$('document').ready(

o puedes usar una forma abreviada

$(function(){
});
rahul
fuente
1

$( 'input[name="testGroup"]:radio' ).on('change', function(e) {
     console.log(e.type);
     return false;
});

Esta sintaxis es un poco más flexible para manejar eventos. No sólo puede observar "cambios", sino que también aquí se pueden controlar otros tipos de eventos mediante el uso de un solo controlador de eventos. Puede hacer esto pasando la lista de eventos como argumentos al primer parámetro. Ver jQuery en

En segundo lugar, .change () es un atajo para .on ("change", handler). Vea aquí . Prefiero usar .on () en lugar de .change porque tengo más control sobre los eventos.

Por último, simplemente estoy mostrando una sintaxis alternativa para adjuntar el evento al elemento.

Carlos Augusto
fuente
¿Cómo es esto efectivamente diferente de la respuesta de Iwao Nishida? ?
Todos los trabajadores son esenciales
es diferente porque no usa .change () sino .on () No hay razón para rechazar esta respuesta.
luis