【问题标题】:radio different names - only check one无线电不同的名称 - 只检查一个
【发布时间】:2012-11-30 04:06:22
【问题描述】:

我在基于 xtcommerce 的解决方法中使用了许多单选按钮。这些单选按钮是动态创建的,并为每个组赋予不同的名称,如下所示:

<input type="radio" name="id[1]" value="40">
<input type="radio" name="id[1]" value="30">
<input type="radio" name="id[1]" value="20">
<input type="radio" name="id[1]" value="10">
<input type="radio" name="id[2]" value="40">
<input type="radio" name="id[2]" value="30">
<input type="radio" name="id[2]" value="20">
<input type="radio" name="id[2]" value="10">
<input type="radio" name="id[3]" value="10">
....

现在我想将这些单选按钮“组合”在一起,这样我一次只能选择一个单选按钮。现在默认情况下,每个“组”(name="id[1]"、name="id[2]" 等)的每个第一个单选按钮都是预先选择的,并且每个单选按钮的每个值都会被提交。

我在 stackoverflow 上找到了这个脚本,只选择一个单选按钮:

$(document).ready(function () {
  $('input[type=radio]').prop('checked', false);
  $('input[type=radio]:first').prop('checked', true)

  $('input[type=radio]').click(function (event) {
    $('input[type=radio]').prop('checked', false);
    $(this).prop('checked', true);

    event.preventDefault();
  });
});

这是一个小提琴:

http://jsfiddle.net/3xD7V/1/

到目前为止,这有效,我只能在我的页面上选择一个单选按钮。但是你也可以在我的 js-fiddle 中看到一个问题:

http://jsfiddle.net/ksZxV/

第一组的第一个单选按钮已预先选择 - 没关系。但是,如果您选择同一组的另一个单选按钮,则选择-“标记”不会改变。仅当您单击另一个组的单选按钮时,所选单选按钮才会被选中(在 FF (编辑:和 Opera 以及 IE9)中发现另一个错误,如果我选择任何其他单选按钮;在 Chrome 中,它通过选择另一个组来更改)。如果您留在同一组中,则选择也不会改变。

在我的本地安装中,我有一个动态变化的更新程序,它说明了所选项目的新价格(抱歉,我无法在小提琴中实现它)。到目前为止,这有效,即使我选择同一组的另一个单选按钮,价格也会更新,但如前所述,选择-“标记”不会改变......

对这个问题有什么想法吗?

【问题讨论】:

  • 为什么不能给每个按钮起相同的名字呢?
  • 嗨LeviBotelho:这是不可能的,因为基于xtcommerce的解决方法,名称是动态给出的,需要像这样在购物车中获得选定的选项......希望你明白什么我描述...
  • 明白了。为时已晚,尽管 Yograj/bipen 似乎有解决方案:)

标签: jquery radio-button


【解决方案1】:

为什么你有event.preventDefault(); 在那里....因为你的点击函数中的代码正在这样做。

删除event.preventDefault(); 并尝试

这是小提琴..

http://jsfiddle.net/ksZxV/1/

【讨论】:

  • 我使用了这里的脚本并获取了所有代码,但您的解决方案效果很好,非常感谢!
【解决方案2】:

只需删除 event.preventDefault(); 即可。

查看JSFIDDLE

【讨论】:

    【解决方案3】:

    您无需取消选中所有单选按钮,然后重新选中当前单选按钮。取消选中之前选中的按钮就足够了。

    作为这种简化的副作用,您的错误也得到了修复。

    $(document).ready(function () {
        $('input[type=radio]').change(function() {
            // When any radio button on the page is selected,
            // then deselect all other radio buttons.
            $('input[type=radio]:checked').not(this).prop('checked', false);
        });
    });​
    

    【讨论】:

    • 您好,Grilse,也感谢您的解决方案!我拿了你的,因为代码量是最少的。此代码适用于所有单选按钮,但我如何才能使用 id="option_3" 将 div 内的两个单选按钮除外?
    • 添加到我上面的评论:或所有带有name="id[3]"的单选按钮
    • 如果我理解正确,那么您希望应用相同的逻辑,但不是应用于整个页面,而是应用于页面的某些特定部分。为此,请更改 jquery 选择器。例如,使用$('div#option_3 input[type=radio]')$('div#option_3 input[type=radio]:checked') 会将效果限制在某些 div 上,并使页面的其余部分正常工作。将此逻辑仅应用于带有name="id[3]" 的单选按钮将毫无意义,因为它不会改变现有的单选按钮行为。
    • thx Grilse...我用这个代码得到了它:`$('input[type=radio]').not('[name="id[3]"]').not ('[name="id[1]"]').change(function() { // 当页面上的任何单选按钮被选中时, // 然后取消选择所有其他单选按钮。 $('input[type=radio ]:checked').not(this).not('[name="id[3]"]').not('[name="id[1]"]').prop('checked', false ); });`
    【解决方案4】:

    单选按钮名称不同,但选择单一

    工作示例:https://codepen.io/Vivekparashar/pen/wvwLwxY

    JS:

    $(document).ready(function() {
      $("input[type=radio]").prop("checked", false);
      $("input[type=radio]:first").prop("checked", true);
    
      $("input[type=radio]").click(function(event) {
        $("input[type=radio]").prop("checked", false);
        $(this).prop("checked", true);
    
        //event.preventDefault();
      });
    });
    

    HTML:

    <div class="mycontainer">   
        <h3 class="heading">Radio Button With Different Name/Group but Single Selection</h3>
        <hr>
        <form>
            <div class="radioDiv">
                <label class="11">Radio Button 1</label>
                <input type="radio" name="radiobutton1">
            </div>
            <div class="radioDiv">
                <label>Radio Button 2</label>
                <input type="radio" name="radiobutton2">
            </div>
            <div class="radioDiv">
                <label>Radio Button 3</label>
                <input type="radio" name="radiobutton3">
            </div>
            <div class="radioDiv">
                <label>Radio Button 4</label>
                <input type="radio" name="radiobutton4">
            </div>
            <div class="radioDiv">
                <label>Radio Button 5</label>
                <input type="radio" name="radiobutton5">
            </div>
        </form>
    </div>  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 2014-06-11
      相关资源
      最近更新 更多