Javascript Web单选按钮,您可以在其中关闭所有功能

Javascript Web单选按钮,您可以在其中关闭所有功能,javascript,jquery-ui,radio-button,Javascript,Jquery Ui,Radio Button,我想在我的网页上有3个单选按钮。如果我单击一个按钮,它将打开,组中的另两个按钮将关闭。到目前为止一切正常。但是,如果我单击当前的“开”按钮,我希望它切换到“关”。即,能够关闭组中的所有按钮 我已经查看了jQueryUI按钮,但是我不知道如何实现它。这可能吗?或者是否有其他javascript库提供此功能 普通jQuery单选按钮的代码示例 <!DOCTYPE html> <html> <head> <link href="http://ajax.goog

我想在我的网页上有3个单选按钮。如果我单击一个按钮,它将打开,组中的另两个按钮将关闭。到目前为止一切正常。但是,如果我单击当前的“开”按钮,我希望它切换到“关”。即,能够关闭组中的所有按钮

我已经查看了jQueryUI按钮,但是我不知道如何实现它。这可能吗?或者是否有其他javascript库提供此功能

普通jQuery单选按钮的代码示例

<!DOCTYPE html>
<html>
<head>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<script type="text/javascript">

  $(document).ready(function() {
    $("#radio").buttonset();
  });

</script>
</head>
<body style="font-size:62.5%;">

<div id="radio">
    <input type="radio" id="radio1" name="radio" /><label for="radio1">Choice 1</label>
    <input type="radio" id="radio2" name="radio" checked="checked" /><label for="radio2">Choice 2</label>
    <input type="radio" id="radio3" name="radio" /><label for="radio3">Choice 3</label>
</div>

</body>
</html>

$(文档).ready(函数(){
$(“#收音机”).buttonset();
});
选择1
选择2
选择3

正如您所知,您想要的不是单选按钮的工作方式。颠覆任何UI元素的常规行为通常不是一个好主意。但是,您可以使用一个onclick处理程序来标记一个按钮,比如“clear all”,该处理程序将清除所有单选按钮。这是个好主意,我认为:在我看来,必须选择第二个单选按钮来清除第一个单选按钮的选中状态总是一件痛苦的事。当然,您不需要jquery来完成这项工作


不过,重复一次:我不会指定单选按钮数组中的一个来处理您描述的其他单选按钮

正如你所知,你想要的不是单选按钮的工作方式。颠覆任何UI元素的常规行为通常不是一个好主意。但是,您可以使用一个onclick处理程序来标记一个按钮,比如“clear all”,该处理程序将清除所有单选按钮。这是个好主意,我认为:在我看来,必须选择第二个单选按钮来清除第一个单选按钮的选中状态总是一件痛苦的事。当然,您不需要jquery来完成这项工作


不过,重复一次:我不会指定单选按钮数组中的一个来处理您描述的其他单选按钮

我会这样做:

$(window).ready(function() {

    var currentRadio = new Array();
    $('input:radio').bind('click', function() {
        var name = $(this).attr('name');
        if(name in currentRadio && currentRadio[name] === $(this)[0]) {
            $(this).removeAttr('checked');
            currentRadio[name] = false;
        } else {
            currentRadio[name] = $(this)[0];
        }
    });

});
这是多组单选按钮(按名称分组)的通用解决方案


这就是它的作用:

我会这样做:

$(window).ready(function() {

    var currentRadio = new Array();
    $('input:radio').bind('click', function() {
        var name = $(this).attr('name');
        if(name in currentRadio && currentRadio[name] === $(this)[0]) {
            $(this).removeAttr('checked');
            currentRadio[name] = false;
        } else {
            currentRadio[name] = $(this)[0];
        }
    });

});
这是多组单选按钮(按名称分组)的通用解决方案


这就是它的作用:

您的最终目标是使用jQuery UI按钮集还是仅仅拥有您描述的功能?您在这个问题中提到了两个问题:关闭所有单选按钮以及使用jQuery UI按钮集。@Zero21xxx理想情况下,我会使用jQuery UI,因为我已经在使用它了(更容易使用UI主题)。但是如果jQueryUI按钮不支持它,那么我需要寻找其他的方法,你可以发布单选按钮的HTML和一些JavaScript吗?就规范而言,单选按钮永远不应该有“全部关闭”状态——所以帮助你实现这一点的工具总是有点不实用(这在HTML5中是不同的,仅供参考-)您的最终目标是使用jQueryUI按钮集还是仅仅拥有您描述的功能?您在这个问题中提到了两个问题:关闭所有单选按钮以及使用jQuery UI按钮集。@Zero21xxx理想情况下,我会使用jQuery UI,因为我已经在使用它了(更容易使用UI主题)。但是如果jQueryUI按钮不支持它,那么我需要寻找其他的方法,你可以发布单选按钮的HTML和一些JavaScript吗?就规范而言,单选按钮永远不应该有“全部关闭”状态——所以帮助你实现这一点的工具总是有点不实用(这在HTML5中是不同的,仅供参考-)我删除了我的答案,因为我想在
onClick
事件中覆盖浏览器的默认行为,但是@Pete Wilson是正确的,因为单选按钮在这种情况下不是你想要的-正如他指出的,用户体验很差。@Gareth,Pete Wilson谢谢。但是,我想要的功能(修改的单选按钮行为)不需要通过HTML单选表单输入实现。例如,它可以使用复选框来完成,在复选框中,您可以定制javascript单击事件处理程序来控制哪些按钮是开/关的,尽管有点复杂。所以我希望这之前已经完成了。@spidey——是的,看起来复选框更像您想要的,以符合通常的UI实践。这已经做了很多很多次了,所以这很平常。虽然复选框不应该引发操作,但它有点不符合规范。真的没有编写代码时所看到的复杂。我删除了我的答案,因为我想在
onClick
事件中覆盖浏览器的默认行为,但是@Pete Wilson是正确的,因为单选按钮在这个场景中不是你想要的——正如他指出的,用户体验很差。@Gareth,Pete Wilson谢谢。但是,我想要的功能(修改的单选按钮行为)不需要通过HTML单选表单输入实现。例如,它可以使用复选框来完成,在复选框中,您可以定制javascript单击事件处理程序来控制哪些按钮是开/关的,尽管有点复杂。所以我希望这之前已经完成了。@spidey——是的,看起来复选框更像您想要的,以符合通常的UI实践。这已经做了很多很多次了,所以这很平常。虽然复选框不应该引发一个动作,所以它有点不符合规范。当你编写它时,你会发现它并不复杂。