使用jquery按需禁用一系列单选按钮

使用jquery按需禁用一系列单选按钮,jquery,ruby-on-rails,input,radio-button,Jquery,Ruby On Rails,Input,Radio Button,我正试图实现类似于历史页面的功能,动态禁用系列中的单选按钮 即。。。如果选择第二组中的#4,则第一组中的1-4将被禁用,以此类推 我知道如何单独或作为一个组禁用它们,但我不确定如何在一系列示例(例如1-4)中禁用它们: 个别地: $("#version_history input[id^=versions_2_3]:radio").attr('disabled',true); 或组: $("#version_history input[id^=versions_2]:radio").attr(

我正试图实现类似于历史页面的功能,动态禁用系列中的单选按钮

即。。。如果选择第二组中的#4,则第一组中的1-4将被禁用,以此类推

我知道如何单独或作为一个组禁用它们,但我不确定如何在一系列示例(例如1-4)中禁用它们:

个别地:

$("#version_history input[id^=versions_2_3]:radio").attr('disabled',true);
或组:

$("#version_history input[id^=versions_2]:radio").attr('disabled',true);
输入被命名为versions_1_X和versions_2_X,X是一些数字。1..2..3.. 等等


我的最终目标是为函数提供单击的单选按钮。。。然后禁用对方组中高于数字或低于数字的所有单选框。

给定以下HTML:

<div id="version_history">
   <div class="version_history_item">
       <input type="radio" name="original">
       <input type="radio" name="update">
       <span>description</span>
   </div>
   ...
</div>

描述
...
一种可能的办法是:

function updateVersionRadioButtonAvailability() {

    var versionHistoryElement = $('#version_history'),
        originalIndex = $('input[name=original]:checked', versionHistoryElement).parent('.version_history_item').index(),
        updateIndex = $('input[name=update]:checked', versionHistoryElement).parent('.version_history_item').index(),
        visibleStyle = { visibility: 'visible' },
        hiddenStyle = { visibility: 'hidden' };

    $('.version_history_item', versionHistoryElement).each(function(index) {
        $('input[name=original]', $(this)).css(index > updateIndex ? visibleStyle : hiddenStyle);
        $('input[name=update]', $(this)).css(index < originalIndex ? visibleStyle : hiddenStyle);
    });

}

$(document).ready(function() {
    $('#version_history input[name=original], #version_history input[name=update]').live('click', updateVersionRadioButtonAvailability);
    updateVersionRadioButtonAvailability();
});
函数updateVersionRadioButtonAvailability(){
var versionHistoryElement=$(“#version_history”),
originalIndex=$('input[name=original]:checked',versionHistoryElement).parent('.version\u history\u item').index(),
updateIndex=$('input[name=update]:选中',versionHistoryElement).parent('.version\u history\u item').index(),
visibleStyle={visibility:'visible'},
hiddenStyle={visibility:'hidden'};
$('.version\u history\u item',versionHistoryElement)。每个(函数(索引){
$('input[name=original],$(this)).css(索引>更新索引?visibleStyle:hiddenStyle);
$('input[name=update],$(this)).css(索引

干编码,因此您的里程数可能会有所不同。

我不太确定是否理解您试图实现的目标,因此我做出了决定。基本上,它会禁用所选组版本号较低的所有无线电组

我不知道您是否想禁用所有这些按钮,因为无法再次单击它们,所以我还添加了一个重置按钮


也许如果你再澄清一下你到底想要什么?

好吧,就是这样。。。如果你看一下,你就会明白我到底想做什么。是的,现在我看到了肯的代码,我明白你想要什么了。我不得不调整一些东西来让他的代码正常工作。。。我将在他的帖子中发表评论。+1:我知道问题现在在问什么(悬而未决),但当我尝试你的代码时,我发现索引有两个问题。每个索引的
versionHistoryElement
需要不同:对于原始索引,它需要
[input=original]
,更新时也需要相同。因此不能在下面的
.each()
函数中使用。福吉:我不理解你所说的versionHistoryElement对于每个索引都需要不同。代码中唯一的错误是分配了
originalIndex
updateIndex
。它们都缺少对
父函数的调用。好的,看起来您已经修复了它。您是从
.version\u history\u项目
中编制索引的,我是从分别为每一列编制索引的角度来查看它的。两种方法都有效:P