使用jQuery禁用单选按钮

时间:2011-06-06 06:26:23

标签: javascript jquery

我有一组具有相同name的单选按钮,其中一些可能被禁用。我不希望用户选中或取消选中已禁用的单选按钮。显然,这意味着如果禁用了组中已选中的单选按钮,则用户无法更改选择。

我为此编写了以下代码。

$("#container").delegate(":radio","click",function(e){
    alert($(":radio").filter(":checked").val());
    //this always shows up the value of the radio button clicked
    if($(":radio").filter(":checked").is(":disabled"))
    {
        e.preventDefault();
    }

});

我想问题是,只要单击单选按钮,选择就会更改并执行事件处理程序,.preventDefault()将恢复选择。

我希望它很清楚

这是jsFiddle

3 个答案:

答案 0 :(得分:2)

你可以这样做:

$('#container :radio:checked:disabled').parent().delegate(":radio","click",function(e){
     e.preventDefault();
});

示例:http://jsfiddle.net/dTBVa/50/

答案 1 :(得分:2)

另外两个答案到目前为止还没有处理无线电组。

我在与是()

的问题的战斗之后完成了这项工作

我在 中遇到语法错误(“:已检查”) 或者jQuery对于已禁用但已检查的无线电不返回true - 如果点击其他无线电暂时从其他无线电中删除已检查的javascript布尔值而不实际删除已检查的属性,这将解释它。

工作示例

短版:无法处理多个已禁用的

$("#container :radio").click(function(e){
    var disR = $("#container input[name="+$(this).attr("name")+"]")
     .filter(":disabled");
    if (disR.length > 0 && disR.attr("checked")==="checked") {
          e.preventDefault();
          return false
    }
});

更长的版本: - 现在,包装每个广播组并使用其他建议越来越有趣

http://jsfiddle.net/mplungjan/HQs6s/

$("#container :radio").click(function(e){
    var radioGroup = $("#container input[name="+$(this).attr("name")+"]");
    var disR = radioGroup.filter(":disabled"); // cannot use :checked
    if (disR.length == 0) return true;
    for (var i=0,n=disR.length, chk;i<n;i++) {
        chk = disR[i].getAttribute("checked");
        if (chk && chk==="checked") { // html element
          e.preventDefault();
          return false;
      }
    }
});

答案 2 :(得分:1)

在点击事件中:$(":checked")指向已点击的广播,而不是已点击的广播。 preventDefault()确定点击的广播是否会保持点击状态。所以你可能想做这样的事情:

function attachMyNoClick() {
    if ($("#container :radio").filter(":checked").is(":disabled")) {
        $("#container :radio").bind("click.MyNoClick", false);
    }
    else {
        $("#container :radio").unbind("click.MyNoClick");
    }
}    
$(document).ready(function() {
    attachMyNoClick
});

如果有jQuery代码更改了单选按钮的禁用状态,则应该将上述函数挂钩到该函数中。您必须首先unbind()点击事件,然后bind()必要时点击事件。

Demo here

注意:即使选中了已禁用的单选按钮也不会提交。