使用jQuery禁用单选按钮

时间:2009-09-10 17:10:05

标签: jquery

我在点击loadActive链接时尝试禁用这些单选按钮,但由于某种原因,它只会禁用顺序中的第一个,然后跳过其余部分。

<form id="chatTickets" method="post" action="/admin/index.cfm/">
    <input id="ticketID1" type="radio" checked="checked" value="myvalue1" name="ticketID"/>
    <input id="ticketID2" type="radio" checked="checked" value="myvalue2" name="ticketID"/>
</form>
<a href="#" title="Load ActiveChat" id="loadActive">Load Active</a>

这是我正在使用的jquery:

jQuery("#loadActive").click(function() {
    //I have other code in here that runs before this function call
    writeData();
});
function writeData() {
    jQuery("input[name='ticketID']").each(function(i) {
    jQuery(this).attr('disabled', 'disabled');
});
}

8 个答案:

答案 0 :(得分:46)

我已经重构了一下你的代码,这应该可行:

jQuery("#loadActive").click(writeData);

function writeData() {
    jQuery("#chatTickets input:radio").attr('disabled',true);
}

如果表单上有两个以上的单选按钮,则必须修改选择器,例如,您可以使用starts with attribute filter选择ID以ticketID开头的无线电:

function writeData() {
    jQuery("#chatTickets input[id^=ticketID]:radio").attr('disabled',true);
}

答案 1 :(得分:41)

删除“每个”并使用:

$('input[name=ticketID]').attr("disabled",true);

那很简单。它的工作原理

答案 2 :(得分:9)

首先,有效语法是

jQuery("input[name=ticketID]")

第二,你试过了吗?

jQuery(":radio")

代替?

第三, 为什么不为所有单选按钮分配一个类,并按类选择它们?

答案 3 :(得分:5)

只需使用jQuery prop

 $(".radio-button").prop("disabled", false);
 $(".radio-button").prop("disabled", true); // disable

答案 4 :(得分:3)

我刚用你的代码构建了一个沙箱环​​境,它对我有用。这是我使用的:

<html>
  <head>
    <title>test</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
  </head>
  <body>
    <form id="chatTickets" method="post" action="/admin/index.cfm/">
      <input id="ticketID1" type="radio" checked="checked" value="myvalue1" name="ticketID"/>
      <input id="ticketID2" type="radio" checked="checked" value="myvalue2" name="ticketID"/>
    </form>
    <a href="#" title="Load ActiveChat" id="loadActive">Load Active</a>

    <script>
      jQuery("#loadActive").click(function() {
        //I have other code in here that runs before this function call
        writeData();
      });
      function writeData() {
        jQuery("input[name='ticketID']").each(function(i) {
            jQuery(this).attr('disabled', 'disabled');
        });
      }
    </script>
  </body>
</html>

我在FF3.5中测试过,现在转移到IE8。它在IE8中也可以正常工作。您使用的浏览器是什么?

答案 5 :(得分:2)

代码:

function writeData() {
    jQuery("#chatTickets input:radio[id^=ticketID]:first").attr('disabled', true);
    return false;
}

另请参阅:Selector/radioSelector/attributeStartsWithSelector/first

答案 6 :(得分:1)

您应该使用类来使其更简单,而不是使用属性名称或任何其他jQuery选择器。

答案 7 :(得分:0)

您可以尝试使用此代码。

var radioBtn = $('<input type="radio" name="ticketID1" value="myvalue1">');
if('some condition'){
    $(radioBtn).attr('disabled', true); // Disable the radio button.
    $('.span_class').css('opacity', '.2'); // Set opacity to .2 to mute the text in front of the radio button.
}else{
    $(radioBtn).attr('disabled', false);
    $('.span_class').css('opacity', '1');
}