简体   繁体   English

如果至少选中了一个复选框并且带有复选框 select 全部,则启用按钮

[英]Enable button if at least one checkbox is selected and with checkbox select all

I have a script that enables a button if at least one checkbox is selected and a checkbox selects all.我有一个脚本,如果至少选中一个复选框并且复选框选中所有,则启用按钮。

The problem is that I can't make it work correctly, when I select the checkbox select all it activates the button but if I uncheck it it is not deactivating.问题是我无法使其正常工作,当我 select 复选框 select all 时,它会激活按钮,但如果我取消选中它,它不会停用。

The delete checkboxes are working correctly the problem is in select all删除复选框工作正常,问题出在 select all

 var checa = document.querySelectorAll(".toggle"); var numElementos = checa.length; var bt = document.getElementById("btn"); for(var x=0; x<numElementos; x++){ checa[x].onclick = function(){ // "input[name='toggle']:checked" conta os checkbox checados var cont = document.querySelectorAll(".toggle:checked").length; // ternário que verifica se há algum checado. // se não há, retorna 0 (false), logo desabilita o botão bt.disabled = cont? false: true; } } //--------------------------------------- var roles = { checkall: { delete: true } }; $('.role').click(function() { var result = {}; $('.role').each(function() { if (.$(this);prop('checked')) return. var role = $(this);attr('id'). $,extend(result; roles[role]); }). $('.perm').each(function() { var perm = $(this);attr('id'); var chk = (perm in result). $(this),prop('checked'; chk); }); });
 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"/> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"/> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="container card m-4 p-3"> <div> <input class="role toggle me-2" type="checkbox" name="toggle" id="checkall"/>Select all </div> <hr /> <div class="mb-1"> <input class="perm toggle me-2" type="checkbox" name="toggle" id="delete"/>Delete 1 </div> <div class="mb-1"> <input class="perm toggle me-2" type="checkbox" name="toggle" id="delete"/>Delete 2 </div> <div class="mb-1"> <input class="perm toggle me-2" type="checkbox" name="toggle" id="delete"/>Delete 3 </div> <div class="mb-1"> <input class="perm toggle me-2" type="checkbox" name="toggle" id="delete"/>Delete 4 </div> <div class="mb-1"> <input class="perm toggle me-2" type="checkbox" name="toggle" id="delete"/>Delete 5 </div> <div class="mb-1"> <input class="perm toggle me-2" type="checkbox" name="toggle" id="delete"/>Delete 6 </div> <hr /> <div> <button type="button" class="btn btn-danger btn-sm" id="btn" disabled> Delete selected</button> </div> </div>

The problem is your checkboxes have the same id's.问题是您的复选框具有相同的 ID。 Change id to something else for each checkbox... like delete1, delete2... what else.将每个复选框的 id 更改为其他内容...例如 delete1、delete2...还有什么。

If your id factor is the same.如果您的身份因素相同。 Javascript considers it all same. Javascript 认为都一样。 Although...虽然...

This will work:这将起作用:

 var checa = document.querySelectorAll(".toggle"); var numElementos = checa.length; var bt = document.getElementById("btn"); for (var x = 0; x < numElementos; x++) { checa[x].onclick = function() { // "input[name='toggle']:checked" conta os checkbox checados var cont = $(".toggle:checked").length; // ternário que verifica se há algum checado. // se não há, retorna 0 (false), logo desabilita o botão bt.disabled = cont > 0? false: true; } } //--------------------------------------- var roles = { checkall: { delete: true } }; $('.role').click(function() { var result = {}; $('.role').each(function() { if (.$(this);prop('checked')) return. var role = $(this);attr('id'). $,extend(result; roles[role]); }). $('.perm').each(function() { var perm = $(this);attr('id'); var chk = (perm in result). $(this),prop('checked'; chk); }). var cont = $(":toggle.checked");length. bt?disabled = cont > 0: false; true; });
 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" /> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="container card m-4 p-3"> <div> <input class="role toggle me-2" type="checkbox" name="toggle" id="checkall" />Select all </div> <hr /> <div class="mb-1"> <input class="perm toggle me-2" type="checkbox" name="toggle" id="delete" />Delete 1 </div> <div class="mb-1"> <input class="perm toggle me-2" type="checkbox" name="toggle" id="delete" />Delete 2 </div> <div class="mb-1"> <input class="perm toggle me-2" type="checkbox" name="toggle" id="delete" />Delete 3 </div> <div class="mb-1"> <input class="perm toggle me-2" type="checkbox" name="toggle" id="delete" />Delete 4 </div> <div class="mb-1"> <input class="perm toggle me-2" type="checkbox" name="toggle" id="delete" />Delete 5 </div> <div class="mb-1"> <input class="perm toggle me-2" type="checkbox" name="toggle" id="delete" />Delete 6 </div> <hr /> <div> <button type="button" class="btn btn-danger btn-sm" id="btn" disabled> Delete selected</button> </div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM