jQuery: как получить индекс проверенной радиокнопки - PullRequest
17 голосов
/ 22 марта 2011

Недавно я наткнулся на ответ 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.Любые идеи о том, что я могу делать не так?

Ответы [ 6 ]

32 голосов
/ 22 марта 2011

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

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'));
5 голосов
/ 22 марта 2011

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

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

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

var radioIdx = $(":radio[name='radioFieldName']:checked")
                   .index(":radio[name='radioFieldName']");
2 голосов
/ 22 марта 2011

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

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

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

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

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

0 голосов
/ 30 октября 2016

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

0 голосов
/ 11 апреля 2014

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

$('#myFormID input:radio[name=radioFieldName]').click(function(){
  var index = $('#myFormID input:radio[name=radioFieldName]').index(this);
  alert(index);
});
0 голосов
/ 07 мая 2013

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

    alert($("input[name=checkname]:checked").map(function () {return this.value;}).get().join(","));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...