web-dev-qa-db-ja.com

jQuery:チェックされたラジオボタンのインデックスを取得する方法

私は最近、 jQuery を使用してチェック済みラジオボタンの値を取得する方法に関する優れた指示を提供するStackOverflowの回答に出会いました。

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の値を返します。私が間違っている可能性があることについて何か考えはありますか?

19
Mass Dot Net

これは動作するはずです。すべてを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'));
32
Kelsey

コレクション内の要素を指定し、コレクション内の要素の相対的な位置を返す index の形式を使用してみてください。

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

または、別のコレクションにあるセレクターに一致する最初のアイテムを見つけて、2番目のコレクションでの位置を報告するバージョン。

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

いくつかのオプションがあります:

1)ラジオボタンリストを列挙し(:checked修飾子なし)、それがチェックされているかどうかをテストします。もしそうなら、あなたはグループ内の要素のIDを持っています。

2)より良い方法(imo)は、いくつかのデータを各要素に関連付け、そのデータをプルすることです。したがって、要素に値を持つ「data-index」属性を指定すると、単純に次のように呼び出すことができます

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

そして価値があります。

2
Tejs

これは古いですが、これを試してください(ラジオボタンのクリック機能内にいると想定しています)

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

ラジオボタンがチェックされる前の値を取得するため、-1を返します。私はあなたがあなたのリスナーを配置し、インデックスをチェックするのを逃したと思います。私は同じエラーを受け取りましたが、最終的に答えを見つけました、何もチェックされる前にインデックスを取得します。コードの配置を確認してください。上記のコードは正しいです。

0
Bhimbim

これを使って

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