0

我正在使用这个 customInput 插件(带有 jQ​​uery 1.6.2)来自定义我的单选按钮的外观。

它工作得很好。

我现在遇到的问题是我只是想获取index()所选单选按钮的编号,它总是返回0. 有六个单选按钮,我正在寻找 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()返回0, 2, 4, 6, 8, 或10. 这就像它<label>本身被计入 的一部分index(),有效地加倍了计数。为什么会这样?

我无法删除这些<label>元素,因为插件依赖于这些元素才能发挥作用。

我只想根据是否选中单选按钮 0 到 5 来检索 0 到 5 的数字。

有什么建议么?也许另一种检查选择了哪个单选按钮的方法?

我的终极目标?根据选择的按钮简单地更改一些变量。

4

1 回答 1

1

正如您所注意到的,index当您不使用该插件时,您的调用并不完全按照您期望的方式工作。来自精美手册

如果没有参数传递给该.index()方法,则返回值是一个整数,指示 jQuery 对象中的第一个元素相对于其兄弟元素的位置。

您得到的值是您认为的两倍大,因为这些<label>元素也是同级元素,因此在同级列表中有五个<input>元素和五个元素。<label>

当您激活插件时,您的单选按钮会被包裹在 a 中<div>,因此每个按钮的结构如下所示:

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

剩下的单选按钮只有一个兄弟,<label>index零。

您的单选按钮上已经有了id属性,那么为什么不使用这些属性来计算索引呢?像这样的东西:

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

检查这些演示中的第三个数字:

或者您可以使用以下元素形式index

如果.index()在元素集合上调用并传入 DOM 元素或 jQuery 对象,则.index()返回一个整数,指示所传递元素相对于原​​始集合的位置。

所以你可以这样做:

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

还有一些演示:

于 2011-10-16T22:44:52.807 回答