【问题标题】:Sync Selected Radio Button between 2 radio button groups - Opposites在 2 个单选按钮组之间同步选定的单选按钮 - 相反
【发布时间】:2012-11-23 16:34:39
【问题描述】:

我需要做一些类似于JQuery Sync Selected Radio Button between 2 radio button groups 的事情。

我有 2 个广播组 -

<input type="radio" name="radio_A" id="radio_A_1" value="1" />1st
<input type="radio" name="radio_A" id="radio_A_2" value="2" />2nd 

<input type="radio" name="radio_B" id="radio_B_1" value="1" />1st
<input type="radio" name="radio_B" id="radio_B_2" value="2" />2nd

当检查radio_A_1 时,我需要同步/检查radio_B_2。关系将是-
radio_A_1=>radio_B_2
radio_A_2=>radio_B_1
radio_B_1=>radio_A_2
radio_B_2=>radio_A_1
/p>

使用#8804502提供的答案

$('input[name=radio_A]').change(function() {
var index = $(this).index('input[name=radio_A]');
console.log(index);
$('input[name=radio_B]:eq(' + index + ')').attr('checked','checked');
});

我得到相同=>相同,但仅当 A 更改时-
radio_A_1=>radio_B_1
radio_A_2=>radio_B_2

所以如果我复制它,将它从A=&gt;B 更改为B=&gt;A-

$('input[name=radio_A]').change(function() {
var index = $(this).index('input[name=radio_A]');
console.log(index);
$('input[name=radio_B]:eq(' + index + ')').attr('checked','checked');
});
$('input[name=radio_B]').change(function() {
var index = $(this).index('input[name=radio_B]');
console.log(index);
$('input[name=radio_A]:eq(' + index + ')').attr('checked','checked');
});

AB 更改时,我得到相同=>相同-
radio_A_1=>radio_B_1
radio_A_2=>radio_B_2 radio_B_1=>radio_A_1
radio_B_2=>radio_A_2

如何同步它们1=&gt;2/2=&gt;1,而不是1=&gt;1/2=&gt;2?可以用 1 块代码而不是 2 块来完成吗?

【问题讨论】:

    标签: javascript jquery radio-button


    【解决方案1】:

    您需要添加一些代码来获取刚刚单击的元素的index,如果是1,则将其设置为0,如果是0,则将其设置为1。想到的第一种方式如下:

    $('input[name=radio_A]').change(function() {
        var index = $(this).index('input[name=radio_A]') === 1 ? 0 : 1;
        $('input[name=radio_B]:eq(' + index + ')').attr('checked', 'checked');
    });
    $('input[name=radio_B]').change(function() {
        var index = $(this).index('input[name=radio_B]') === 1 ? 0 : 1;
        $('input[name=radio_A]:eq(' + index + ')').attr('checked', 'checked');
    });
    

    演示:http://jsfiddle.net/cTQeJ/1/

    虽然你也可以试试:

    var index = 1 - $(this).index('input[name=radio_A]');
    

    (如果你想让你的代码变得混乱,或者下面的演示使用了一种有趣的技巧:http://jsfiddle.net/cTQeJ/

    “可以用 1 块代码而不是 2 块来完成吗?”

    如果您可以稍微修改 html,那么使用一个简短的代码块就很容易了。尝试这样的改变:

    <input type="radio" name="radio_A" data-sync="1" value="1" />1st
    <input type="radio" name="radio_A" data-sync="2" value="2" />2nd
    
    <input type="radio" name="radio_B" data-sync="2" value="1" />1st
    <input type="radio" name="radio_B" data-sync="1" value="2" />2nd
    

    我为每个单选按钮添加了一个data-sync 属性(并删除了id 属性,因为它没有被使用,但显然你可以在需要时保留它)。然后你可以像这样写一个简单的函数:

    var $radios = $('input[data-sync]');
    $radios.change(function() {
        $radios.filter('[data-sync="' + $(this).attr('data-sync') + '"]')
               .prop('checked', true);
    });​
    

    ...基本上说每当检查任何广播按钮时,都会使用 data-sync属性找到所有其他广播按钮,并也检查它们。

    请注意,这将适用于两个以上的组,如此演示中所示:http://jsfiddle.net/cTQeJ/2/

    【讨论】:

    • 这很好用。谢谢您的帮助。我特别喜欢“以下演示使用了一种有趣的技巧”这句话。
    猜你喜欢
    • 2013-04-10
    • 2017-07-24
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    相关资源
    最近更新 更多