JQuery: как получить индекс проверенного переключателя

Недавно я столкнулся с ответом StackOverflow, который дал отличные инструкции по как получить значение проверенного переключателя с помощью jQuery:

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

Теперь я пытаюсь найти нулевой индекс зарегистрированного переключателя. Я думал, что это будет относительно просто:

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

Однако radioIdx всегда возвращает значение -1. Любые идеи о том, что я могу сделать неправильно?

Ответ 1

Это должно сработать. Вы можете сделать все это в одной строке, но я сломал его, чтобы было легче читать:

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

РЕДАКТИРОВАТЬ: Убедитесь, что ваш селектор правильно. Разбивайте его шаг за шагом:

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);

Какой шаг не производит ожидаемое значение в этих?

РЕДАКТИРОВАТЬ: Показать окончательное решение

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

Ответ 2

Попробуйте использовать форму index, которая позволяет вам указать элемент в коллекции и вернуть его относительное положение в коллекции:

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

или версия, которая находит первый элемент, соответствующий селектору, который находится в другой коллекции, и сообщает о его позиции во второй коллекции.

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

Ответ 3

Есть несколько вариантов:

1) Перечислите список радиокнопки (ака без модификатора: checked) и проверьте, проверен ли он; Если это так, у вас есть идентификатор элемента в группе.

2). Лучший способ (imo) - просто связать некоторые данные с каждым элементом и вытащить эти данные. Поэтому, если вы передадите элементу атрибут 'data-index' со значением, вы можете просто вызвать

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

И получите значение.

Ответ 4

используйте этот

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

Ответ 5

Хотя это и старо, но попробуйте это (при условии, что вы находитесь в функции щелчка переключателей)

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

Ответ 6

он возвращает -1, потому что вы получаете значение до того, как будет проверена радиомаяк. я думаю, вы пропустили, чтобы ваш слушатель и индекс были проверены. Я только что получил ту же ошибку, но, наконец, нашел ответ, я получаю индекс до того, как что-либо было проверено, пожалуйста, проверьте расположение кода, приведенный выше код прав.