En jQuery, ¿cómo puedo seleccionar un elemento por su atributo nombre?

Tengo 3 botones de radio en mi página web, como la siguiente:

<label for="theme-grey">
  <input type="radio" id="theme-grey" name="theme" value="grey" />Grey</label>
<label for="theme-pink">
  <input type="radio" id="theme-pink" name="theme" value="pink" />Pink</label>
<label for="theme-green">
  <input type="radio" id="theme-green" name="theme" value="green" />Green</label>

En jQuery, quiero obtener el valor del botón de radio seleccionado cuando se hace clic en cualquiera de estos tres. En jQuery tenemos los selectores id (#) y class (.), pero ¿qué pasa si quiero encontrar un botón de radio por su nombre, como abajo?

$("<radiobutton name attribute>").click(function(){});

Por favor, dime cómo resolver este problema.

Solución

Esto debería servir, todo esto está en la documentación, que tiene un ejemplo muy similar a este:

$("input[type='radio'][name='theme']").click(function() {
    var value = $(this).val();
});

También debo notar que tienes múltiples IDs idénticos en ese fragmento. Esto es HTML inválido. Utilice clases para agrupar conjuntos de elementos, no IDs, ya que deben ser únicos.

Comentarios (7)

Para determinar qué botón de radio está marcado, intente lo siguiente:

$('input:radio[name=theme]').click(function() {
  var val = $('input:radio[name=theme]:checked').val();
});

El evento será capturado para todos los botones de radio en el grupo y el valor del botón seleccionado será colocado en val.

*Actualización: Después de publicar he decidido que la respuesta de Paolo&#391 es mejor, ya que utiliza un recorrido menos del DOM. Dejo esta respuesta en pie ya que muestra cómo obtener el elemento seleccionado de una manera que es compatible con todos los navegadores.

Comentarios (4)

¿Algo como esto tal vez?

$("input:radio[name=theme]").click(function() { 
 ...
}); 

Cuando se hace clic en cualquier botón de radio, creo que va a terminar seleccionado, por lo que esto va a ser llamado para el botón de radio seleccionado.

Comentarios (2)