Recientemente me encontré con una respuesta de StackOverflow que brindaba excelentes instrucciones sobre cómo obtener el valor de un botón de opción marcado usando jQuery :
var radioVal = $("#myFormID input:radio[name='radioFieldName']:checked").val(); alert('Selected radio button value = ' + radioVal);Ahora estoy tratando de encontrar el índice basado en 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 devuelve un valor de -1 . ¿Alguna idea sobre lo que podría estar haciendo mal?
Esto debería funcionar. Podrías hacerlo todo en una sola línea, pero lo dividí 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 sea correcto. Desglosarlo 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 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 radio (también conocido como sin el modificador :checked) y probar para ver si está marcado; si es así, tiene la identificación del elemento en el grupo.
2) La mejor manera (imo), es simplemente asociar algunos datos con cada elemento y extraer esos datos. Entonces, si le da al elemento un atributo de 'índice de datos' con el valor, puede simplemente llamar
$('#myFormID input:radio[name='radioFieldName']:checked').data('index')Y tener el valor.