0

この customInput プラグイン(jQuery 1.6.2を使用) を使用して、ラジオ ボタンの外観をカスタマイズしています。

それはうまくいきます。

私が今抱えている問題はindex()、選択したラジオボタンの番号を取得しようとしているだけで、常に返されること0です。6 つのラジオ ボタンがあり、0 から 5 までの数字を探しています。

JavaScript:

$('input[name="amount"]').click(function() {
    var x = $(this).filter(':checked').index();
    var y = $(this).filter(':checked').val(); //<-- for troubleshooting
    alert(x + y);  //<-- for troubleshooting
});

奇妙なことに、val()まだ正常に動作しており、適切な値を返します。したがって、フォーム データは常に正しい無線値を取得しています。

http://jsfiddle.net/sparky672/LdVGD/

HTML:

<fieldset id="radioset">
    <input type="radio" id="radio-1" name="amount" value="Option 1" checked="checked" /><label for="radio-1" title="">Option 1</label>
    <input type="radio" id="radio-2" name="amount" value="Option 2" /><label for="radio-2" title="">Option 2</label>
    <input type="radio" id="radio-3" name="amount" value="Option 3" /><label for="radio-3" title="">Option 3</label>
    <input type="radio" id="radio-4" name="amount" value="Option 4" /><label for="radio-4" title="">Option 4</label>
    <input type="radio" id="radio-5" name="amount" value="Option 5" /><label for="radio-5" title="">Option 5</label>
    <input type="radio" id="radio-6" name="amount" value="Option 6" /><label for="radio-6" title="">Option 6</label>
</fieldset>

customInput プラグインを使用しない場合は、インデックス番号が返されます。

http://jsfiddle.net/sparky672/LdVGD/1/


補足質問:

プラグインを無効にすると、、、、、またはindex()が返されます。それ自体が の一部でカウントされているようで、実質的にカウントが 2 倍になります。なぜこれが必要なのですか?0246810<label>index()

<label>プラグインはこれらに依存して機能するため、要素を削除できません。

ラジオボタン0から5がチェックされているかどうかに応じて、0から5までの数値を取得したいだけです。

助言がありますか?おそらく、どのラジオボタンが選択されているかを確認する別の方法でしょうか?

私の究極の目標?どのボタンが選択されているかに応じて、いくつかの変数を単純に変更します。

4

1 に答える 1

1

お気づきindexのように、プラグインを使用しないと、呼び出しが期待どおりに機能しません。細かいマニュアルから:

メソッドに引数が渡されない場合.index()、戻り値は、兄弟要素に対する jQuery オブジェクト内の最初の要素の位置を示す整数です。

<label>要素も兄弟であるため、兄弟リストに5 つ<input>の要素と 5 つの要素があるため、本来あるべき値の 2 倍の大きさの値を取得しています。<label>

プラグインを有効にすると、ラジオ ボタンが でラップされる<div>ため、各ボタンの構造は次のようになります。

<div>
    <input type="radio">
    <label>
</div>

これにより、ラジオ ボタンには 1 つの兄弟、<label>、およびindexゼロの が残ります。

ラジオ ボタンには既にid属性があるので、それらを使用してインデックスを見つけてみませんか? このようなもの:

var index = parseInt(this.id.replace(/radio-/, ''), 10) - 1;

これらのデモで 3 番目の数字を確認してください。

または、次の要素形式を使用できますindex

.index()が要素のコレクションで呼び出され、DOM 要素または jQuery オブジェクトが渡された場合、.index()元のコレクションに対する渡された要素の位置を示す整数を返します。

したがって、次のようにすることができます。

var i = $('input[name=amount]').index(this);

そしていくつかのデモ:

于 2011-10-16T22:44:52.807 に答える