【问题标题】:Prevent checkbox from being selected in Javascript防止在Javascript中选中复选框
【发布时间】:2018-04-12 13:09:36
【问题描述】:

我有一个 JavaScript 函数来检查复选框是否被选中。

如果是,则计算选中了多少个复选框,并检查是否达到了选中的最大数量(4)。

事情是这样的:

当我尝试选中第五个时,如何使该功能显示警报并禁用所有未选中的复选框?

即使是尝试检查为 5 的那个。

 function ChkValidate() {

          var chkDytLek = document.getElementById("ChkDytLek");
          var chkDytUSD = document.getElementById("ChkDytUSD");
          var chkDytEU = document.getElementById("ChkDytEU");
          var chkDytCAD = document.getElementById("ChkDytCAD");
          var chkDytCHF = document.getElementById("ChkDytCHF");
          var chkDytAUD = document.getElementById("ChkDytAUD");
          var chkDytGBP = document.getElementById("ChkDytGBP");

          var MaxCount = 0
          var unCheckedCount = 0

          if (chkDytLek.checked == true) {
              MaxCount = MaxCount + 1

              if (MaxCount == 4) {

                  disableIfNotChecked();
              }
          } else {
              unCheckedCount = unCheckedCount + 1 
          }

          if (ChkDytUSD.checked == true) {
              MaxCount = MaxCount + 1

              if (MaxCount == 4) {
                  disableIfNotChecked();
              }
          } else {
              unCheckedCount = unCheckedCount + 1
          }  
          if (ChkDytEU.checked == true) {
              MaxCount = MaxCount + 1
              if (MaxCount == 4) {
                  disableIfNotChecked();
              }
          } else {
              unCheckedCount = unCheckedCount + 1
          }

          if (ChkDytCAD.checked == true) {
              MaxCount = MaxCount + 1

              if (MaxCount == 4) {
                  disableIfNotChecked();
              }
          } else {
              unCheckedCount = unCheckedCount + 1
          }

          if (ChkDytCHF.checked == true) {
              MaxCount = MaxCount + 1

              if (MaxCount == 4) {
                  disableIfNotChecked();
              }
          } else {
              unCheckedCount = unCheckedCount + 1
          }
          if (ChkDytGBP.checked == true) {
              MaxCount = MaxCount + 1

              if (MaxCount == 4) {
                  disableIfNotChecked();
              }
          } else {
              unCheckedCount = unCheckedCount + 1
          }

          if (ChkDytAUD.checked == true) {
              MaxCount = MaxCount + 1

              if (MaxCount == 4) {
                  disableIfNotChecked();


              }
          } else {
              unCheckedCount = unCheckedCount + 1
          }

           if (unCheckedCount >= 4) {                  
              enableIfNotChecked();
           }


      }

当前代码显示警报并在计数为 4 时禁用复选框。

当我希望这发生在 5 时,但如果我改变这个:

 if (MaxCount == 4) {
                  disableIfNotChecked(); 

到:

 if (MaxCount == 5) {
                  disableIfNotChecked();

代码将禁用复选框,但也会选中被选为 5 的复选框。

知道如何解决这种情况吗?

【问题讨论】:

  • 我猜你是在复选框的检查事件上调用 ChkValidate(),你能发布那个代码吗?这就是您需要取消选中您当前选中的框的地方,可能是通过从 ChkValidate() 返回 false 或其他内容

标签: javascript checkbox


【解决方案1】:

我认为您需要对何时尝试选择复选框进行某种控制。

试试这个:

$('input[type="checkbox"]').on('click', function(event) {
  if(maxCount == 5) {
    event.preventDefault();
    alert('So many checkboxes');
  }    
});

这是小提琴:

http://jsfiddle.net/DrKfE/817/

【讨论】:

  • 这个 if(MaxCount
  • 好的,我想我现在明白了。检查答案。
  • 您可以更改小提琴中的 maxCount 的值以便正确检查。
【解决方案2】:

将此添加到复选框 ChkValidate(this) 内的函数调用中

<asp:CheckBox ID="ChkDytCAD" runat="server" GroupName="Monedha" Text="CAD" CssClass="radioMarginLeft" onClick="ChkValidate(this)" ClientIDMode="Static" />

将参数添加到函数中,并在函数末尾有 4 个复选框时取消选中它

function ChkValidate(checkbox) {
    ...
    if (MaxCount > 4) {
        checkbox.checked = false;
    }
}

这是一个例子,它几乎可以满足您的需求,它只会让您一次最多检查 4 个框https://jsfiddle.net/2p069wvb/8/

【讨论】:

  • 我应该把它放在别的地方吗,因为什么都没有发生
  • 只需在函数末尾添加 if 语句并将其添加到 asp:CheckBox 中的 ChkValidate(this) 中,它应该可以工作
猜你喜欢
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多