jQuery: cómo obtener el índice de un botón de opción marcado

Hace poco me encontré con una respuesta de StackOverflow que daba excelentes instrucciones sobre cómo obtener el valor de un botón de opción con jQuery :

var radioVal = $("#myFormID input:radio[name='radioFieldName']:checked").val(); alert('Selected radio button value = ' + radioVal); 

Ahora estoy tratando de encontrar el índice de base cero del botón de opción marcado. Pensé que sería relativamente simple:

 var radioIdx = $("#myFormID input:radio[name='radioFieldName']:checked").index(); 

Sin embargo, radioIdx siempre está devolviendo un valor de -1 . ¿Alguna idea sobre lo que podría estar haciendo mal?

Esto debería funcionar. Se podía hacerlo todo en una sola línea, pero me lo rompió para que sea más fácil de leer:

 var radioButtons = $("#myFormID input:radio[name='radioFieldName']"); var selectedIndex = radioButtons.index(radioButtons.find(':checked')); 

EDITAR: Verifique que su selector es correcto. Divídelo paso a paso:

 var radioButtons = $("#myFormID input:radio[name='radioFieldName']"); // this should contain the count of all your radio buttons var totalFound = radioButtons.length; // this should contain the checked one var checkedRadioButton = radioButtons.find(':checked'); // this should get the index of the found radio button based on the list of all var selectedIndex = radioButtons.index(checkedRadioButton); 

¿Qué paso no está produciendo el valor esperado en estos?

EDITAR: Para mostrar la solución final.

 var radioButtons = $("#myFormID input:radio[name='radioFieldName']"); var selectedIndex = radioButtons.index(radioButtons.filter(':checked')); 

Intente usar la forma de índice que le permite especificar un elemento en una colección y devuelve su posición relativa en la colección:

 var radioIdx = $(":radio[name='radioFieldName']") .index($(":radio[name='radioFieldName']:checked")); 

o la versión que encuentra el primer elemento que coincide con un selector que está en otra colección e informa de su posición en la segunda colección.

 var radioIdx = $(":radio[name='radioFieldName']:checked") .index(":radio[name='radioFieldName']"); 

Hay un par de opciones:

1) Enumerar a través de la lista de botones de opción (también conocido como: modificador verificado) y probar para ver si está marcado; si es así, tienes el id del elemento en el grupo.

2) La mejor manera (OMI), es simplemente asociar unos datos con cada elemento y tirar de esos datos. Así que si se le da el elemento de una ‘técnica de índice’ atributo con el valor, a continuación, puede simplemente llamar

 $('#myFormID input:radio[name='radioFieldName']:checked').data('index') 

Y tiene el valor.

utilizar esta

  alert($("input[name=checkname]:checked").map(function () {return this.value;}).get().join(",")); 

Aunque esto es viejo, pero intente esto (asumiendo que usted está dentro de la función de clic de los botones de radio)

 $('#myFormID input:radio[name=radioFieldName]').click(function(){ var index = $('#myFormID input:radio[name=radioFieldName]').index(this); alert(index); }); 

devuelve -1 porque obtiene el valor antes de verificar cualquier botón de radio. Creo que echas de menos tu oyente y tu índice revisado. Acabo de recibir el mismo error, pero finalmente encontré la respuesta, obtengo el índice antes de que se verificara algo. Por favor, verifique la disposición de su código.