Недавно я столкнулся с ответом 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, потому что вы получаете значение до того, как будет проверена радиомаяк. я думаю, вы пропустили, чтобы ваш слушатель и индекс были проверены. Я только что получил ту же ошибку, но, наконец, нашел ответ, я получаю индекс до того, как что-либо было проверено, пожалуйста, проверьте расположение кода, приведенный выше код прав.