禁用按钮,直到单击一个单选按钮

时间:2014-12-20 15:00:09

标签: javascript jquery

所以我正忙于注册,我希望人们选择性别。我通过使用单选按钮来完成此操作。现在,我想要的是,有一个禁用的post按钮,直到两个框中的一个被选中,这是我用jQuery做的:

var $radio = $("input:radio");
$radio.change(function() 
{
    var checkedButtons = false;
    $radio.each(function() {
        if (this.checked) 
        {
            var checkedButtons = true;
            return false;
        }
    });
if (checkedButtons)
{
    $("#postGender").removeAttr("disabled");
}
    else
{
    $("#postGender").attr("disabled", "disabled");
}

});

这个小块是代码,是我在stackoverflow上找到的。唯一不对的是它不起作用。

请参阅此内容以获取更多代码,并获得演示:JsFiddle

4 个答案:

答案 0 :(得分:8)

您可以将所有内容减少到一行:

$("input:radio").change(function () {$("#postGender").prop("disabled", false);});

<强> jsFiddle example

答案 1 :(得分:0)

删除第一个var块中的ifvar checkedButtons = true;正在该块的范围内创建不同的 checkedButtons。因此,第一个checkedButtons将保持不变,另一个在if块完成后消失。

应该是checkedButtons = true;

答案 2 :(得分:0)

你可以大大简化这一点。

如果您考虑一下,一旦他们点击单选按钮,他们就无法取消选择它们:他们只能点击另一个单选按钮。因此,一旦按钮改变了一次,就不再需要监视它了,你可以从那里启用按钮。

$("input:radio").change(function () {
    $("#postGender").attr("disabled", false);
});

Demo

答案 3 :(得分:0)

这样的事情应该做:

var $radio = $("input:radio");
$radio.change(function () {
    if ($radio.filter(':checked').length > 0) {
        $("#postGender").removeAttr("disabled");
    } else {
        $("#postGender").attr("disabled", "disabled");
    }
});

http://jsfiddle.net/n6sta3dp/8/

一些旁注:

  • 选中单选按钮后,用户永远不会取消选中该单选按钮(除非他开始使用js控制台)。我认为删除函数中的“else”部分是安全的。
  • 不要忘记也可以使用回车键提交表单,因此仅禁用该按钮是不够的。您应该也可以收听表单的提交事件,并在让提交通过之前检查用户是否做出了选择。