javascript - 用于处理单选按钮启用/禁用的通用 JavaScript

标签 javascript jquery html

我希望仅在选中关联的复选框时才启用单选按钮。因此,我需要帮助编写通用的 javascript 代码,该代码适用于所有复选框。我有大约 100 个复选框,因此我不想在 javascript 代码中手动编写每个 ID 或名称。能否提供一个代码示例来说明如何以通用方式执行此操作。

<form name=registration>
<table border=1>
<tr>
    <td><input type='checkbox' id='c1' name=selcourse value='2-PM-030' onChange="enabledSDF(1,this.value);"> Microsoft Project 2013 </td>
    <td>&nbsp;</td><td><input type=radio id=cd name='2-PM-030' value='Dec 11-12'>Dec 11-12</td>
    <td><input type=radio id=c1d1 name='2-PM-030' value='Jan 26-27'>Jan 26-27</td><td>&nbsp;</td>
    <td>&nbsp;</td><td>&nbsp;</td>
</tr>

<tr>
    <td><input type='checkbox' id='c2' name=selcourse value='2-PM-050'> Microsoft Project 2010 </td>
    <td><input type=radio id=c2d1 name='2-PM-050' value='Nov 24-25'>Nov 24-25</td>
    <td><input type=radio id=c2d2 name='2-PM-050' value='Dec 18-19'>Dec 18-19</td>
    <td><input type=radio id=c2d3 name='2-PM-050' value='Jan 29-30'>Jan 29-30</td>
    <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
</tr>
</table>
</form>

我找到了以下代码片段,但我不确定如何使其通用。

<script type="text/javascript">
$(window).load(function(){
$(document).ready(function()

function enabledSDF(i,value){
    var form = document.registration;
    if(document.getElementById('course_type').value=='C')
    {
            if (value=="Singaporean"){
                document.getElementById("sdf"+i+"0").disabled='';
                document.getElementById("sdf"+i+"1").disabled='';
            }
            else{
                document.getElementById("sdf"+i+"0").disabled='disabled';
                document.getElementById("sdf"+i+"1").disabled='disabled';
            }
    }
}

$(document).ready(function() 
{

    $("#email_acc").click(function()
    { 
        if ( $(this).is(":checked") ) 
        {  
            $("input[name='radio_email']").removeAttr("disabled");

        }else {

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

    $("#sys_acc").click(function()
    {
        if ( $(this).is(":checked") )
        {   
            $("input[name='radio_system']").removeAttr("disabled");
        } else {

            $("input[name='radio_system']").attr ( "disabled" , true );
        }
    }); 
});
</script>

最佳答案

尝试以下操作:

$(function() {
  $('input[type="checkbox"]')
    .on('change', checkboxChange) // do it when you change the checkbox
    .each(checkboxChange); // as well as once when the page loads

  function checkboxChange() {
    var $checkbox = $(this);
    $('input[name="' + $checkbox.attr('value') + '"]').prop('disabled', !$checkbox.prop('checked'));
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form name=registration>
  <table border=1>
    <tr>
      <td>
        <input type='checkbox' id='c1' name=selcourse value='2-PM-030' onChange="enabledSDF(1,this.value);">Microsoft Project 2013</td>
      <td>&nbsp;</td>
      <td>
        <input type=radio id=cd name='2-PM-030' value='Dec 11-12'>Dec 11-12</td>
      <td>
        <input type=radio id=c1d1 name='2-PM-030' value='Jan 26-27'>Jan 26-27</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>

    <tr>
      <td>
        <input type='checkbox' id='c2' name=selcourse value='2-PM-050'>Microsoft Project 2010</td>
      <td>
        <input type=radio id=c2d1 name='2-PM-050' value='Nov 24-25'>Nov 24-25</td>
      <td>
        <input type=radio id=c2d2 name='2-PM-050' value='Dec 18-19'>Dec 18-19</td>
      <td>
        <input type=radio id=c2d3 name='2-PM-050' value='Jan 29-30'>Jan 29-30</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
  </table>
</form>

编辑:如果没有通过公共(public)属性值链接

如果单选按钮的名称与用于禁用它们的复选框的值不同,那么您需要从更改为 <tr> 的复选框进行遍历。包含它们,然后找到其中的单选按钮。

为此,只需更改我的 checkboxChange()功能如下。

function checkboxChange() {
    var $checkbox = $(this);
    $checkbox.closest('tr').find('input[type=radio]').prop('disabled', !$checkbox.prop('checked'));
}

关于javascript - 用于处理单选按钮启用/禁用的通用 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26924624/

相关文章:

javascript - 将图像属性更改为<li>示例标题</>

javascript - 展开输入日期日历(浏览器原生)

javascript - 为什么 Blob 构造函数只将数组作为第一个参数?

javascript - JQuery Click - 激活父级

javascript - 使用expo Camera SDK时,Undefined不是一个对象_expo.camera.constant

javascript - 如何保证函数的执行是有序的?

jquery - 如何尽可能流畅地加载网页

jquery - 如果 <details> 具有 'open' attr,如何更改 <summary> 文本

javascript - WEBVTT 字幕多次显示

php - 只能将表的最后一行数据插入到 session 中