如果语句检查两个输入,则选中一个复选框,并且输入的值在最大长度 [closed]

If statement checking two inputs, a checkbox is checked and the value of an input in max length [closed]

提问人:Eliot 提问时间:9/12/2023 最后编辑:Eliot 更新时间:9/12/2023 访问量:47

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

2个月前关闭。

我在 html 和 JavaScript 中有两个输入,我正在尝试编写一个函数来检查两个输入以显示按钮。用户需要输入 7 个文本并选中该框才能显示按钮。

$(document).on("input", "#activationCode", function(e) {
  e.preventDefault();
  //Only enable button if the activation code is 7 characters
  let checkbox = document.getElementById("checkbox");
  if ($(this).val().length == 7 && checkbox.checked) {
    $('.kit-activation-button').attr('disabled', false);
  } else {
    $('.kit-activation-button').attr('disabled', true);
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="activationCode" name="code" class="form-control required" required aria-required="true" maxlength="7">

<input type="checkbox" id="checkbox" />

<button type="submit" class=" btn btn-primary" id="Button" disabled>submit</button>

我试过了这个,但是当您输入 7 个字符并选中该框时,我仍然无法让禁用属性消失。

JavaScript HTML jQuery IF-语句 前端

评论

1赞 Barmar 9/12/2023
HTML 中没有。你是说吗?id="activation-pwn-check"document.getElementById("checkbox")
2赞 Barmar 9/12/2023
事件处理程序仅在用户输入文本字段时运行。如果他们先输入代码,您也需要在他们选中该框时运行它。
0赞 epascarello 9/12/2023
使用开发人员工具。运行代码时,错误消息会清楚地显示出来。
1赞 Mister Jojo 9/12/2023
表单验证不是你的敌人,你必须使用它!
0赞 Rob 9/12/2023
您在使用右斜杠时不一致。不是修复程序,但请注意,<input> 标签不使用也不需要右斜杠,并且从未在任何 HTML 规范中使用。

答:

1赞 Barmar 9/12/2023 #1

id="checkbox"应该是 ,并且应该是 。id="activation-pwn-check"id="Button"id="kit-activation-button"

将启用提交按钮的代码移动到其自己的函数中。然后,您可以从文本输入和复选框的事件处理程序中调用它。

function enableDisableSubmit() {
  let checkbox = $("#activation-pwn-check");
  let textfield = $("#activationCode");
  $('#kit-activation-button').attr('disabled', !(checkbox.prop('checked') && textfield.val().length == 7));
}

$(document).on("input", "#activationCode", enableDisableSubmit);

$(document).on("change", "#activation-pwn-check", enableDisableSubmit);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="activationCode" name="code" class="form-control required" required aria-required="true" maxlength="7">

<input type="checkbox" id="activation-pwn-check" />

<button type="submit" class=" btn btn-primary" id="kit-activation-button" disabled>submit</button>

评论

0赞 Eliot 9/12/2023
这奏效了,非常感谢!
0赞 Zak 9/12/2023 #2

您没有在元素上命名您的类,因此您没有调用任何东西。此外,您没有在激活时检查复选框的状态(选中未选中).kit-activation-button

你可以通过为冗余代码创建一个函数来简化这一点,但我觉得长手是显示缺点的更好解释。

$(document).on("input", "#activationCode", function(e) {
  e.preventDefault();
  if ($(this).val().length == 7 && $("#checkbox").is(":checked")) {
    $('.kit-activation-button').attr('disabled', false);
  } else {
    $('.kit-activation-button').attr('disabled', true);
  }
});

$(document).on('click', "#checkbox", function() {
  if ($("#activationCode").val().length == 7 && $("#checkbox").is(":checked")) {
    $('.kit-activation-button').attr('disabled', false);
  } else {
    $('.kit-activation-button').attr('disabled', true);
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="activationCode" name="code" class="form-control required" required aria-required="true" maxlength="7">

<input type="checkbox" id="checkbox" />

<button type="submit" class="kit-activation-button btn btn-primary" id="Button" disabled>submit</button>

简化版本为:

$(document).on("input", "#activationCode", function() {
  checkInput();
}).on('click', "#checkbox", function() {
  checkInput();
});


function checkInput(){
  $('.kit-activation-button').attr('disabled', 
  ($("#activationCode").val().length == 7 
     && $("#checkbox").is(":checked")) ? false : true);
}