【问题标题】:How To Enable/Disable a Table Row in jQuery如何在 jQuery 中启用/禁用表格行
【发布时间】:2017-08-28 07:47:34
【问题描述】:

在 jQuery 中是否有一个预制函数,当您单击一个按钮时,它将启用一行。然后,如果您再次单击它,它将禁用该行。我发现了 toggle() 和 toggleClass()。但是它在调用函数时确实有效。想法有点像这样,但我知道语法是错误的。

jQuery

function disableRows(){
$("#test1table tbody tr").each(function() {
    $(this).find('input:text').prop('disabled', true);
});

function enableRows(){
$("#test1table tbody tr").each(function() {
    $(this).find('input:text').prop('disabled', false);
});

$(document).ready(function() {
  $('.yearButt').click(function(){
      $(this).toggleClass(enableRows(), disableRows());
  });
}); 

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    使用toggle而不是toggleClass,toggle会在每次点击事件时交替调用函数

    $(document).ready(function() {
      $('.yearButt').toggle(
          function() { enableRows(); }, 
          function() { disableRows(); }
        );
      });
    });
    

    您还可以通过删除循环并为所需元素使用适当的选择器来优化启用禁用代码

    $("#test1table").find("input,button,textarea,select").attr("disabled", "disabled");

    this

    【讨论】:

    • 其实这应该被标记为正确的答案。经过测试和工作,没有失败。
    【解决方案2】:

    我认为下面的代码可以帮助你理解需求:

    参考:Enable Disable Controls in a table row

    $(document).on('change', '.chkView', function() {
        $(this).closest('tr').find('.chkEdit, .chkDelete').prop('disabled', !this.checked);
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <table id="table_forms">
        <tr>
            <td><input type="checkbox" class="chkView"/>View</td>
            <td><input type="checkbox" class="chkEdit" disabled/>Edit</td>
            <td><input type="checkbox" class="chkDelete" disabled/>Delete</td>
        </tr>
       <tr>
            <td><input type="checkbox" class="chkView"/>View</td>
            <td><input type="checkbox" class="chkEdit" disabled/>Edit</td>
            <td><input type="checkbox" class="chkDelete" disabled/>Delete</td>
        </tr>
    </table>

    【讨论】:

      【解决方案3】:

      您可以简化代码:

      $(document).ready(function() {
          $('.yearButt').click(function(){
              var enabled = parseInt($(this).data('enabled'));
              $("#test1table tbody tr input:text").prop('disabled', enabled );
      
              $(this).data('enabled', !enabled)
          });
      }); 
      

      【讨论】:

      • 当我单击按钮时,它启用了行,但是当我再次单击它时。它不会禁用行返回
      【解决方案4】:

      首先,您要查找的是.toggle(),而不是.toggleClass() :)

      那么……

      这不是你所期望的:

      $(this).toggle(enableRows(), disableRows());
      

      这是立即调用两个函数,然后根据这些函数的结果进行切换。 (两者都是undefined。)您不想执行函数,而只想引用函数,以便.toggle()将根据其逻辑执行它们:

      $(this).toggle(enableRows, disableRows);
      

      注意:如果您的代码 sn-p 是完整的,那么您也忘记了在每个函数之后关闭 }。简单的错字。

      【讨论】:

      • 看起来$(this).toggleClass(enableRows, disableRows); 无论如何都没有任何意义。
      • @dfsq:哦,很好。我什至没有注意到这一点。我可能需要查找切换的正确用法,已经有一段时间了。 编辑:已修复,谢谢!
      • 我试过这样做,但是当我点击按钮时,它会消失并且没有启用行
      • @KaelJasper:您能否仅使用相关的 HTML 和问题(或答案)中的代码复制 jsFiddle 中的行为?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多